1

私はGAEにアプリを持っています:http://1.myawesomecity.appspot.com/

ご覧のとおり、ファイルを選択して[送信]をクリックすると、404になりますが、ファイルは実際に保存されます(大きすぎない限り、100kb未満)。最初のテキストフィールドには何も入力しないでください。

ファイルの投稿名は「myFile」です。

httppostを使用してAndroidアプリからファイルをアップロードしようとしています。

ユーザーがファイルを選択すると、そのディレクトリが取得され、myFileのnamevaluepairがファイルディレクトリに設定されます。次にhttpconnectionを実行しますが、ファイルがアップロードされません。

だから私の質問は..の違いは何ですか

  1. ブラウザで「ファイルを選択」をクリックし、ファイルを選択するのではなく、namevaluepairのmyFileをファイルのディレクトリに割り当てます。

  2. 「送信」をクリックしてアップロードを開始するか、httpconnection.execute(httppost)を実行しますか?

違いがない場合は、ファイルをアップロードする必要があります。ファイルはアップロードされていないので、2つのプロセス(ブラウザーとhttppost)の違いを知っていると、ファイルがアップロードされない理由が明らかになるはずです。

私は次のことを確信しています:私のファイルディレクトリは正しいです。サーバー自体(ほとんど機能していませんが)は、PCのブラウザー、Androidエミュレーターのブラウザー、または実際のAndroidマシンのブラウザーのいずれからでも、ブラウザーを介したアップロードを許可します。Androidアプリのhttpconnectionが実行されています(httpconnectionを実行しても例外はスローされません)。

参考までに、サーバーはGAEのブロブストアを使用しています。

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

1 に答える 1

3

ファイル名だけでなく、実際にファイルを送信する必要があります。次のような単純なものがあなたのためにそれをするはずです:

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 );
于 2013-03-10T05:42:47.960 に答える