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

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中获取相机返回的数据并创建Bitmap,然后从该Bitmap创建File对象等)。

所以问题在于,这种方式不会将照片发送到服务器。但是,如果我在FileBody部分删除mimetype,就可以解决问题:

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

二进制文件/照片已经成功发送。但是由于Web应用程序需要安全性以检查传入的文件以防止二进制恶意软件,因此我需要为实体设置mimeType。那么有人可以告诉我为什么在使用实体请求中的mimeType时文件没有被发送吗?
附注: 我已经在我的项目库中导入了httpclient-4.3.2、httpmime-4.3.2、httpcore-4.3.1,并使用SDK 19进行编译。
1个回答

5

好的,我已经想通了,使用MultipartEntityBuilder写了整个东西。发送二进制照片的行应该如下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接