私は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を実行するのとは異なるブラウザから「送信」をクリックしますか?