2016-09-22 10 views
1

PHPを使用してアンドロイドからサーバーに画像をアップロードしています。 画像ファイルがアップロードされていますが、そのファイルを表示しようとすると、壊れた画像を表示するときに、正確に何が問題なのか分かりません。 アップロードは、サーバー上に示されAsyncTask Androidのコードイメージアンドロイドから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、あるbufferSize);'。これは 'outputStream.write(buffer、0、bytesRead);'でなければなりません。 – greenapps

+0

オリジナルとアップロードされたファイルのサイズを比較してください。 – greenapps

+0

ご返信ありがとうございますが、今終了しました!!問題はファイルブロックの終了にあります。 – Akki

答えて

0

は簡単に解決策になる代わりに、マルチパートの画像のバイト配列またはbase64形式を書き込むに。

チェックこれ:Uploading image from android to php server

+0

あなたのクイック返信をありがとう、ありがとうございますが、ヘッダー@Jai – Akki

+0

はいを​​追加した後に同じ破損した画像を表示しています。これは、クライアント側からコンテンツタイプ "multipart"を渡しているためです。マルチパートの代わりにbase64フォーマットを使用してください。それは画像のアップロードプロセスのために簡単でしょう – Jai

+1

あなたの返信ありがとうございます。しかし、私は解決策とそのmultipart.Actuallyを使用して現在の問題は、私はこの 'outputStream.writeBytes( " - ***** \ r \ n");'バイト配列を送信する前に – Akki

関連する問題