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

标签 android google-app-engine http blobstore

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

如您所见,如果您选择一个文件并点击提交,它会显示 404,但该文件实际上确实被存储了(只要它不是太大,< 100kb)。不要在第一个文本字段中输入任何内容。

文件的帖子名称是“myFile”。

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

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

所以我的问题是.. 之间有什么区别

  1. 打开浏览器,单击“选择文件”,然后选择文件与将名称值对中的 myFile 分配给文件目录

  2. 点击“提交”开始上传还是运行 httpconnection.execute(httppost)?

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

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

仅供引用,服务器正在使用 GAE 的 blobstore。

安卓代码:

        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 );

关于android - 从浏览器填写 http 表单和在 Android 中使用 httppost 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318223/

相关文章:

android - 优化 Androidplot

python - 我们如何使用 Django 覆盖 appengine 中引用属性的选择字段显示?

python - 在 GAE 1.6.0 中添加自定义 Jinja2 过滤器

angularjs - Angular 中的用户名和密码认证

java - 如何在我的 swing 应用程序中使用 Java 类调用并向 Servlet 传递参数?

java - 在Android WebView上实现后退按钮

android - react native ,Android : No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'

python - 如何在 Python 中捕获特定的 HTTP 错误?

android - 如何检测任何类型的用户交互?

python - 如何使用 google-app-engine-django 验证包含 App Engine 上文件的 Django 表单?