如何使用http客户端在Web Api上传图像?

时间:2013-08-06 05:46:48

标签: android web-services multipartentity

我想使用name,chunk,file data参数将我的文件从android设备发送到web api。我有这个代码:它不会返回任何错误我不知道我做错了什么。请帮忙我花了很多时间,但仍然无效。

FileBody localFileBody = new FileBody(new File("/storage/sdcard0/Pictures/Images/angel_productshot.jpg"),
                "image/jpg");

        MultipartEntity localMultipartEntity = new MultipartEntity(
                HttpMultipartMode.BROWSER_COMPATIBLE);

        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 15000);
        HttpConnectionParams.setSoTimeout(httpParameters, 15000);
        HttpPost httpPost = new HttpPost(
                "http://phdsafar4.myserver.com.ph:1217/api/fileupload");
        HttpClient httpclient = new DefaultHttpClient(httpParameters);
        httpPost.addHeader("Authorization","Basic " + Base64.encodeToString(
                        (username + ":" + password).getBytes(), Base64.NO_WRAP));

        httpPost.setHeader("Content-Type", "multipart/form-data");
        httpPost.setHeader("Accept", "application/image");
        localMultipartEntity.addPart("name", new StringBody(filename));
        localMultipartEntity.addPart("chunk", new StringBody("1"));
        localMultipartEntity.addPart("file data", localFileBody);
        httpPost.setEntity(localMultipartEntity);
        HttpResponse localHttpResponse = httpclient.execute(httpPost);
        Log.i("response upload", localHttpResponse.toString());
        Log.i("Multipart Entity", localMultipartEntity.toString());

2 个答案:

答案 0 :(得分:4)

this work for me try it...
 to use MultipartEntity must be add this two jar file in your project lib
 1. httpmime-4.0.1.jar
 2. apache-mime4j-0-.6.jar

MultipartEntity multipartEntity = new MultipartEntity();
File image1 = new File(imagePath);
multipartEntity.addPart("Image1",image1);
File image2 = new File(imagePath2);
multipartEntity.addPart("Image2",image2);
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(Url);
post.setEntity(multipartEntity);
HttpResponse response = client.execute(post);
HttpEntity resEntity = response.getEntity();
response_str = EntityUtils.toString(resEntity);

答案 1 :(得分:1)

通过以下代码

public static String uploadImage(Bitmap bitmap, String imageName, String imageUrl) {

    // String image_description = edtImageDescription.getText().toString();
    StringBuilder s = null;// = new StringBuilder();
    String sResponse;

    try {

        // ---------------------------------------------------------------------------------

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        bitmap.compress(CompressFormat.JPEG, 75, bos);

        byte[] data = bos.toByteArray();

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost postRequest = new HttpPost(imageUrl);

        ByteArrayBody imageByte = new ByteArrayBody(data, imageName);

        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        // sending a String param;


        entity.addPart("image_description","Sample_Image")

        entity.addPart("image_name", imageByte);

        postRequest.setEntity(entity);

        HttpResponse response = httpClient.execute(postRequest);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));

        s = new StringBuilder();

        while ((sResponse = reader.readLine()) != null) {

            s = s.append(sResponse);

        }

        Logger.logger("Utilities", "Response: " + s);

    } catch (Exception e) {

        Logger.logger("Utilities", "Some error came up");

    }

    if (s != null) {
        return s.toString();
    } else {
        return null;
    }

}