3

これは、いくつかの文字列に沿ってバイナリ ファイルを PHP Web アプリケーション サーバーに送信するために私が書いたコードです。

public void doRegister(final String userEmail, final String userPass, final File userPhotoId) {
    HttpClient myHttpClient = new DefaultHttpClient();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                HttpPost registerTry = new HttpPost(Constants.oAuthRegURL);
                MultipartEntity signupEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
                signupEntity.addPart("email", new StringBody(userEmail, Charset.forName("UTF-8")));
                signupEntity.addPart("password", new StringBody(userPass, Charset.forName("UTF-8")));
                signupEntity.addPart("User[profilePicture]", new FileBody(userPhotoId, "image/jpeg"));
                registerTry.setEntity(signupEntity);
                HttpResponse signupHttpResp = myHttpClient.execute(registerTry);
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

ファイルuserPhotoIdは、カメラ API を介して作成および返される写真ファイルです (onActivityResult でカメラを介して返されるデータを取得し、そこからビットマップを作成し、そのビットマップからファイル オブジェクトを作成するなど)。

ここでの問題は、写真がこの方法でサーバーに送信されないことです。しかし、次のようにFileBodyセクションのMIME タイプを削除すると:

signupEntity.addPart("User[profilePicture]", new FileBody(userPhotoId));

バイナリ ファイル/写真が正しく送信されます。しかし、バイナリ マルウェアを防ぐために着信ファイルをチェックするために Web アプリケーションでセキュリティが必要なため、エンティティの mimeType を設定する必要があります。エンティティリクエストでmimeTypeを使用すると、ファイルが送信されない理由を誰か教えてもらえますか?

ps プロジェクトのライブラリに httpclient-4.3.2 、 httpmime-4.3.2 、 httpcore-4.3.1 をインポートし、SDK 19 でコンパイルしました。

4

1 に答える 1

5

OK、私はちょっとそれを理解しました。MultipartEntityBuilder ですべてを書きました。したがって、バイナリ写真の送信に関する行は次のようになります。

signupEntity.addBinaryBody("User[profilePicture]", userPhotoId, ContentType.create("image/jpeg"), ".profile.jpg");
于 2014-01-30T20:11:46.787 に答える