在浏览器中填写http表单和在Android中使用httppost之间的区别



我在GAE上有一个应用程序:http://1.myawesomecity.appspot.com/

正如你所看到的,如果你选择一个文件并点击提交,它会出现404,但文件实际上会被存储(只要它不是太大,<100 kb)。不要在第一个文本域中输入任何内容。

文件的post name是"myFile"

我现在正在尝试使用httppost从Android应用程序上传文件。

用户选择一个文件,我得到它的目录,并将myFile的namevaluepair设置为文件目录。然后我执行httpconnection,但是文件没有被上传。

所以我的问题是…… 和 的区别是什么?
  1. 打开浏览器,点击"选择文件",选择一个文件,并在namevaluepair中将myFile赋值给该文件的目录

  2. 点击"submit"启动上传vs运行httpconnection.execute(httppost)?

如果没有差异,则上传文件。文件没有被上传,所以我相信知道两个进程之间的差异(浏览器与httppost)应该揭示为什么文件没有被上传。

我确信以下内容:我的文件目录是正确的。服务器本身(虽然几乎没有功能)允许通过浏览器上传,无论是从我个人电脑的浏览器,Android模拟器的浏览器,甚至从一个实际的Android机器的浏览器。Android应用程序的httpconnection正在通过(当我执行httpconnection时没有抛出异常)。

供参考,服务器正在使用GAE的blobstore。

Android代码:
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url); //url is the app's site listed above
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                
        nameValuePairs.add(new BasicNameValuePair("myFile", filename) ); //filename is the file's path
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                
        httpclient.execute(httppost);                   

您需要实际发送文件,而不仅仅是文件名。像下面这样简单的操作就可以为您做到这一点:

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost( url );
MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
entity.addPart( "theFile", new FileBody((( new File( filename ), mimeType ));
post.setEntity( entity );
client.execute( post );

最新更新