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

标签 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 中获取通过 Camera 返回的数据并从中创建一个 Bitmap,然后从该 Bitmap 等创建一个 File 对象。 )

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

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

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

附注 我在我的项目库中导入了 httpclient-4.3.2 、 httpmime-4.3.2 、 httpcore-4.3.1 并使用 SDK 19 进行编译。

最佳答案

好吧,我刚刚想通了;在 MultipartEntityBuilder 中编写了整个内容;所以关于发送二进制照片的行将是:

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

关于Android:使用多方时未发送二进制照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21425078/

相关文章:

java - httpClient 无法在我的 Android 应用程序中保留带有许多异步请求的 cookie

java - 文件太大时上传文件错误

java - 破译来自 Google Play 的崩溃报告

android - 可滑动的选项卡并以编程方式添加它们

java - 如何使用 DefaultHttpClient 写入 OutputStream?

android - 以编程方式设置 PercentageRelativeLayout 边距

angular http get 在请求中将正文参数作为 json 发送

Android webview导致点击监听器不触发

android - Admob 插播时间显示