2011-12-14 2 views
0

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

+0

Пожалуйста, объясните, что вы подразумеваете под искаженным? Плохие пиксели/соотношение сторон изменены/пиксели повреждены? – Elemental

+0

Пиксель потерян, поэтому изображение похоже на перекрытие некоторой части на другую – Sandy

ответ

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

+0

Я проверю это. Спасибо за ответ – Sandy

+0

Я также использую ту же библиотеку Apache с моим кодом ... но иногда она ломается, см. Прикрепленное изображение – Sandy

+0

, как я уже сказал, вы захотите сделать MD5 полученного файла и повторно загрузить, если файл не идентичен версии на исходном клиенте. –

Смежные вопросы