2016-09-22 6 views
1

PHP로 안드로이드에서 서버로 이미지를 업로드 중입니다. 이미지 파일이 업로드되고 있지만 그 파일을 보려고하면 깨진 이미지가 정확히 무엇이 문제인지 알 수 없습니다. 업로드는 서버에 표시되는 AsyncTask를 안드로이드 코드이미지 안드로이드에서 PHP 서버로 이미지 업로드 중

FileInputStream fileInputStream; 
    HttpURLConnection connection; 
    URL url; 
    DataOutputStream outputStream; 
    int bytesRead,bytesAvailable,bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File selectedFile = new File(selectedImagePath); 
try 
     { 
      fileInputStream = new FileInputStream(selectedFile); 
      url = new URL("The url of my server"); 
      connection= (HttpURLConnection)url.openConnection(); 
      Log.v(TAG,"connection established"); 
      connection.setDoOutput(true); 
      connection.setDoInput(true); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection","Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE","multipart/form-data"); 
      connection.setRequestProperty("Content-Type","multipart/form-data;boundary=*****"); 
      connection.setRequestProperty("uploaded_file",selectedImagePath); 

      outputStream = new DataOutputStream(connection.getOutputStream()); 

      outputStream.writeBytes("--*****\r\n"); 

      outputStream.writeBytes("Content-Disposition:form-data;name=\"uploaded_file\";filename=\""+selectedImagePath+"\""+"\r\n"); 
      outputStream.writeBytes("\r\n"); 
      outputStream.writeBytes("--*****\r\n"); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable,maxBufferSize); 
      buffer = new byte[bufferSize]; 

      bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      while (bytesRead>0) 
      { 
       outputStream.write(buffer,0,bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable,maxBufferSize); 
       bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      } 
      outputStream.writeBytes("\r\n"); 
      outputStream.writeBytes("--*****\r\n"); 
      int serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 

      if(serverResponseCode == HttpURLConnection.HTTP_OK) { 
       String line; 
       StringBuilder sb = new StringBuilder(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 


      } 
      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
PHP Code: 
$file_path = basename($_FILES['uploaded_file']['name']); 
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) 
{ 
    echo "success"; 
} else 
{ 
    echo "fail"; 
} 

이미지로 수행됩니다 enter image description here

+0

'outputStream.write (버퍼, 0, 버퍼 크기)'. 그것은'outputStream.write (buffer, 0, bytesRead);'이어야합니다. – greenapps

+0

원본 및 업로드 된 파일의 크기를 비교해보십시오. – greenapps

+0

답장을 보내 주셔서 감사 합니다만 지금 완료되었습니다 !! 파일 블록을 닫은 문제가 있습니다. – Akki

답변

0

쉽게 해결책이 될 것 대신에 여러 부분의 이미지에 대한 바이트 배열 또는 base64로 형식을 작성하려면.

확인이 : Uploading image from android to php server

+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 헤더 부분에 @Jai – Akki

+0

예를 추가 한 후 동일한 깨진 이미지가 표시됩니다. 왜냐하면 클라이언트 측에서 content-type "multipart"를 전달하기 때문입니다. 멀티 파트 대신 base64 형식을 사용하십시오. 이미지 업로드 프로세스가 쉽습니다. – Jai

+1

ur 답장을 보내 주셔서 감사합니다. 하지만 솔루션 및 multipart.Actually tht 문제를 사용하여 지금은이 이미지를 사용하여 블록을 종료했다 'outputStream.writeBytes ("- ***** \ r \ n");' 바이트 배열을 보내기 전에 – Akki

관련 문제