2014-01-23 2 views
0

Java 코드를 통해 http://example.com:8080/attachments에 파일을 첨부하려고합니다. 다중 데이터 업로드를 사용하고 있습니다. 나는 텍스트 파일을 업로드하고 그 잘 작동했다. jpg 파일을 시도했을 때 응답 코드는 200이지만 업로드 된 파일에는 문제가 있습니다. 파일이 손상되었다고합니다.Java에서 이미지의 멀티 파트 업로드

이미지를 바이트 배열로 변환하는 코드입니다.

   byte[] bFile = new byte[(int) file.length()]; 
      fileInputStream = new FileInputStream(file); 
      int bytesAvailable = fileInputStream.available(); 
      int maxBufferSize = 4096; 

      byte[] buffer = new byte[bytesAvailable]; 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

      int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable); 

      while (bytesRead > 0) { 
       bos.write(buffer, 0, bytesAvailable); 
       bytesAvailable = fileInputStream.available(); 
       bytesAvailable = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bytesAvailable); 
      } 
      bFile = bos.toByteArray(); 

나는 이미지를 전송하고있는 바이트 배열에 문제가 있으면 알려 주시기 바랍니다

 String contentDisposition = "Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\""; 
     String contentType = "Content-Type: image/jpg";   
     String BOUNDARY = "*****"; 
     HttpsURLConnection connection; 
     String CRLF = "\r\n"; 
     StringBuffer requestBody = new StringBuffer(); 
     requestBody.append("--"); 
     requestBody.append(BOUNDARY); 
     requestBody.append(CRLF); 
     requestBody.append(contentDisposition); 
     requestBody.append(CRLF); 
     requestBody.append(contentType); 
     requestBody.append(CRLF); 
     requestBody.append(CRLF); 
     requestBody.append(new String(bFile)); 
     requestBody.append(CRLF); 
     requestBody.append("--"); 
     requestBody.append(BOUNDARY); 
     requestBody.append("--"); 

     URL obj = new URL("url"); 
     connection = (HttpsURLConnection) obj.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); 
     connection.setRequestProperty("User-Agent", "Mozilla/5.0"); 
     connection.setRequestProperty("Accept","*/*"); 
     connection.setRequestProperty("Authorization", strEncoded); 
     connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); 

     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setUseCaches(false); 
     DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
     wr.writeBytes(requestBody.toString()); 
     wr.flush(); 
     wr.close(); 

을 업로드하는 코드입니다.

오류 메시지가 첨부 된 스크린 샷을 확인하십시오.

http://tinypic.com/r/33233hl/5

감사합니다.

답변

0

파일 바이트를 읽는 코드에 오류가 발생하기 쉽습니다. this question에 대한 응답을 살펴보십시오. 당신이 화상 -에서 읽을 당신이 전송 된 바이트가 필요합니다 -

당신은 당신이 원하는하지 않은이 문자에 이미지 바이트를 변환합니다
requestBody.append(new String(bFile));
으로 요청 본문에 바이트를 추가 할 수 없습니다 파일.

수동으로하는 대신 Apache HttpClient와 같은 것을 사용하십시오. http-post에 파일 바이트를 적절히 두는 것과 같은 세부 작업을합니다. 공식 example을 보거나 this question의 코드를 참조하십시오.

+0

감사합니다. @vanOekal. 문제는 바이트를 보내는 것이 었습니다. 나는 내 코드를 '로 교체했다. while (bytesRead> 0) { wr.write (buffer, 0, bytesAvailable); bytesAvailable = fileInputStream.available(); bytesAvailable = Math.min (bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read (buffer, 0, bytesAvailable); }' 이제 제대로 작동합니다. – Karthik

관련 문제