【问题标题】:Image gets distorted sometime while uploading上传时图像有时会失真
【发布时间】:2012-01-20 07:20:44
【问题描述】:

我正在使用 MIME multipart 将图像上传到服务器。有时图像会失真。如何解决这个问题? 注意:失真意味着丢失了一些像素。 我正在使用以下代码进行上传:

File file = new File(filePath[0]);
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost("serverurl");

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("Content-Type",new StringBody("multipart/form-data;charset=utf-8"));
entity.addPart("Content-Length", new StringBody(String.valueOf(file.length())));
entity.addPart("UploadContentPostD", new FileBody(file));                   
entity.addPart("DocumentName", new StringBody(file.getName()));

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

扭曲的图像是:

【问题讨论】:

  • 请解释一下您所说的失真是什么意思?坏像素/纵横比改变/像素损坏?
  • 像素丢失,因此图像看起来像是与其他部分重叠

标签: android file-upload mime multipart


【解决方案1】:

我使用Apache Commons 进行上传,这是我的上传代码,每次都能完美运行...

public Integer uploadByteArray(String remoteFilename, byte[] bitmapdata){       
        HttpClient client = new HttpClient();
        PostMethod filePost = new PostMethod( URL_PATH);

        Integer ret = null;

        try {           
            Part[] parts = new Part[2];
            parts[0] = new StringPart("file_name" ,remoteFilename);

            ByteArrayPartSource ps = new ByteArrayPartSource("file", bitmapdata);
            parts[1] = new FilePart("file", ps);

            filePost.setRequestEntity(new MultipartRequestEntity(parts,
                    filePost.getParams()));

        } catch (Exception e) {
            Log.d(TAG, e.toString());
        }

        try {
            ret = client.executeMethod(filePost);
            Log.d(TAG, "statusCode>>>" + ret);
            if(ret != 200){
                Log.d(TAG, "Error:" + ret + " from server. Please try again later.");
            }else{
                responseBody = filePost.getResponseBodyAsString();
                Log.d(TAG, filePost.getResponseBodyAsString());
            }
        } catch (Exception e) {
            Log.d(TAG, e.toString());
        }

        filePost.releaseConnection();

        return ret;
    }

如果您继续看到您的问题再次出现,我会在您在服务器上获得的文件上使用 MD5,并在响应中将该值发回,并将其与您发送的文件的本地 MD5 进行比较。如果它们不一样,你就知道出了点问题。

【讨论】:

  • 我会检查这个。感谢回复
  • 我的代码也使用相同的 Apache 库...但有时它会中断,请参阅附图
  • 就像我说的,如果文件与源客户端上的版本不同,您需要对收到的文件进行 MD5 并重新上传。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多