【问题标题】:Android - Sending Images to server generate huge HTTP requestAndroid - 将图像发送到服务器会产生巨大的 HTTP 请求
【发布时间】:2015-08-24 20:15:59
【问题描述】:

我目前正在通过将图像编码为 base64 字符串来将图像发送到我的服务器,如下所示:https://gist.github.com/fabdarice/a4006a97171cc415892e

但是,当我查看 HTTP POST 请求时,我看到的是这样的:

{"login"=>"Jerem", "mobile_upload_file"=>"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAQ4BDgDASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3....................................}

这会持续一段时间(大约 100 万个字符),这似乎让我的服务器变得迟钝。

我想知道看到发送的字符数量是否正常?如果没有,我应该如何实现将图像发送到服务器的过程?

感谢您的帮助

【问题讨论】:

  • 按“原样”发送图像。 Base64 编码使字节数增加了 30%。不要使用json上传图片。
  • 按“原样”,您的意思是将图像作为字节数组发送?基本上发送结果: byte[] bytes = fileToByteArray(file.getPath()); ?
  • 你能给我举个例子吗?
  • 你是否也要更改服务器上的软件?

标签: android imageview base64 multipart okhttp


【解决方案1】:

您可以像这样通过 Multipart 实体在 FileBody 中发送图像...

public String sendMultipartRequestToServer(BusinessDataObject dataObject,String url) {
    String responseString=null;
    HttpResponse response;
    HttpClient client=new DefaultHttpClient();
    HttpPost post=new HttpPost(url);
    HttpConnectionParams.setConnectionTimeout(client.getParams(),50000);
    MultipartEntity multipartEntity=new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    try {
        multipartEntity.addPart(KEY_EMAIL,new StringBody(dataObject.getEmail()));   
        multipartEntity.addPart(KEY_PASSWORD, new StringBody(dataObject.getPassword()));
        multipartEntity.addPart(KEY_IMAGE,new FileBody(new File(Here your image path on your memory)));

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
            //Setting parameter to post method
        post.setEntity(multipartEntity);
        try {
            response=client.execute(post);
            InputStream inputStream=response.getEntity().getContent();
            responseString=convertStreamToString(inputStream);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return responseString;          
}

如果你找不到类 MultipartEntity 。那么你必须在你的项目中添加 HttpMime.jar 。这是迄今为止发送图像的最佳方式,我知道这里不需要在 Base64 中转换图像。你可以通过所选图像的 url 到 FileBody。

【讨论】:

  • MultipartEntity 和 DefaultHttpClient 现在都已弃用。所以我认为你可以先转换它。
  • 好的,那么我必须找到其他方法来做到这一点。但是我在我的代码中使用了 Multipart,所以这就是我推荐它的原因。
  • 我认为您现在可以使用 HttpUrlConnection 和 MultiPartEntityBuilder。转换您的 ĉode 不会花费太多时间。
  • 是的,我得到了 HttpUrlConnection 并且会看到 MultiPartEntityBuilder .. Thx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多