Android:使用multipartentity时未发送二进制照片

时间:2014-01-29 07:49:38

标签: android httpclient multipartentity

以下是我编写的用于将二进制文件沿某些字符串发送到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 是通过Camera API创建并返回的照片文件(我在onActivityResult中获取通过相机返回的数据并从中创建一个位图&然后从该位图创建一个File对象等)

这里的问题是,照片​​不会以这种方式发送到服务器。但是,如果我删除 FileBody 部分中的 mimetype ,就像这样:

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

正确发送二进制文件/照片。但我需要为实体设置mimeType,因为Web应用程序需要安全性来检查传入的文件以防止二进制恶意软件。那么当我在实体请求中使用mimeType时,有人能告诉我为什么不发送文件吗?

P.S。 我在项目的libs中导入了httpclient-4.3.2,httpmime-4.3.2,httpcore-4.3.1,并使用SDK 19进行编译。

1 个答案:

答案 0 :(得分:5)

好吧,我只是觉得它有点儿;在MultipartEntityBuilder中写了整篇文章;所以关于发送二进制照片的界限如下:

signupEntity.addBinaryBody("User[profilePicture]", userPhotoId, ContentType.create("image/jpeg"), ".profile.jpg");