我在 GAE 上有一个应用程序:http: //1.myawesomecity.appspot.com/
固定的:
HttpPost post = new HttpPost("http://1.myawesomecity.appspot.com/");
http_client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
String result = EntityUtils.toString( http_client.execute(post).getEntity(), "UTF-8");
String actualURL = result.substring(result.indexOf("http://"), result.indexOf("\" method"));
Log.w("asdf", "url " + actualURL );
post = new HttpPost(actualURL);
http_client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
String mime_type = "image/png";
File file = new File( filename ); //context.getFilesDir(),
entity.addPart( "myFile", new FileBody( file, mime_type));
post.setEntity( entity );
String res = EntityUtils.toString( http_client.execute(post).getEntity(), "UTF-8");
Log.w("asdf", res);
上面从 GAE 服务器获取实际上传 URL,并按照下面正确答案的指示传入文件。
老问题:
如您所见,如果您选择一个文件并点击提交,它将 404,但该文件实际上确实被存储(只要它不是太大,< 100kb)。不要在第一个文本字段中输入任何内容。
现在,抛开这个特定的应用程序几乎没有功能,我正在尝试将一个文件从 Android 上传到这个服务器上。
该站点的上传脚本使用 blobstore,文件字段名称为“myFile”。
现在在我的 Android 应用程序中,我有:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(<my app's url>);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("myFile", <path to a file selected by user> ) );
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
这会引发异常。
这与我通过浏览器访问我的网站、选择文件并点击提交有何不同?为什么通过浏览器实际上会通过上传文件,而 Android 代码却没有?
我知道我的文件路径是有效的。有什么我做错了吗?还是从不同于从 Android 执行 httpclient 的浏览器单击“提交”?