2011-12-14 2 views
0

이미지를 서버에 업로드 할 때 MIME 멀티 파트를 사용하고 있습니다. 때때로 이미지가 왜곡됩니다. 이 문제를 해결하는 방법은 무엇입니까? 참고 : 왜곡 된 의미는 일부 픽셀이 손실되었음을 의미합니다. 내가 업로드를 위해 다음과 같은 코드를 사용하고 있습니다 :업로드 중에 이미지가 왜곡됩니다.

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

또한 내 아파치 라이브러리와 동일한 코드를 사용하고 있습니다 ...하지만 때로는 깨지므로 첨부 파일 – Sandy

+0

을 참조하십시오.받은 파일의 MD5를 수행하고 다시 업로드하려는 경우 파일이 소스 클라이언트의 버전과 동일하지 않습니다. –

관련 문제