2016-09-22 115 views
1

我使用PHP上传从Android的一些图像服务器。 图片文件正在上传,但是当我试图查看该文件时,它显示的是破碎的图片,不知道究竟是什么问题。 上传在服务器上显示的的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,缓冲区大小);'。这应该是'outputStream.write(buffer,0,bytesRead);'。 – greenapps

+0

请比较原始文件和上传文件的大小。 – greenapps

+0

感谢您的回复,但现在已完成!问题在于关闭文件块。 – Akki

回答

0

要写入的字节数组或Base64格式为图像,而不是多部分将是很容易的解决方案。

检查:Uploading image from android to php server

+0

感谢您将头后您的快速回复,但其显示相同的破碎的形象@Jai – Akki

+0

是啊,因为你逝去的内容类型“多”,从客户端。使用base64格式而不是multipart。这将很容易图像上传过程 – Jai

+1

感谢您的答复。但我现在使用multipart得到了解决方案和它的工作。实际上,问题是我使用这个'outputStream.writeBytes(“ - ***** \ r \ n”)结束了图像块;'在发送字节数组之前 – Akki