Изображение иногда искажается при загрузке - PullRequest
0 голосов
/ 14 декабря 2011

Я использую 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"));

Искаженное изображение: enter image description here

1 Ответ

1 голос
/ 15 декабря 2011

Я использую 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 файла, который вы отправили.Если они не совпадают, значит, что-то пошло не так.

...