2011-05-24 115 views
1

我的应用程序我试图通过PHP服务器发送图像。问题是PHP程序员说它应该作为数据发送。以下是我目前使用的代码,请帮助我将图像转换为数据并从服务器获取响应。将图像上传到android中的服务器

InputStream is; 
    private int serverResponseCode; 
    private String serverResponseMessage; 
    @Override 
    public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     HttpURLConnection connection = null; 
     DataOutputStream outputStream = null; 
     DataInputStream inputStream = null; 

     String pathToOurFile = "/sdcard/siva.PNG"; 
     Log.e("pathToOurFile",""+pathToOurFile); 

     String urlServer = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/upload.php"; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     Log.e("URL Server",""+urlServer); 

     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1*1024*1024; 
     Log.e("maxBufferSize",""+maxBufferSize); 

     try 
     { 
      FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile)); 
      Log.e("FIS",""+fileInputStream); 
      URL url = new URL(urlServer); 
      connection = (HttpURLConnection) url.openConnection(); 

    // Allow Inputs & Outputs 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setUseCaches(false); 

      // Enable POST method 
      connection.setRequestMethod("POST"); 

      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); 

      outputStream = new DataOutputStream(connection.getOutputStream()); 
      outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
      outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd); 
      outputStream.writeBytes(lineEnd); 

      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 

      // Read file 
      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(lineEnd); 
      outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

      // Responses from the server (code and message) 
      Log.e("con",String.valueOf(connection.getDoOutput())); 

      serverResponseCode = connection.getResponseCode(); 
      serverResponseMessage = connection.getResponseMessage(); 
      Log.e("response",""+serverResponseCode); 
      Log.e("serverResponseMessage",""+serverResponseMessage); 

      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
     } 
     catch (Exception ex) 
     { 
      Log.e("Exception Handling",""+ex); 
     } 
     } 

回答

0

Atlast我找到了答案,我做了一个小错误....在上面的代码中,我在下面的行

outputStream.writeBytes(“Content-Disposition的改变只有一个字:形式-data; name = \“uploadedfile \”; filename = \“”+ pathToOurFile +“\”“+ lineEnd);

在上面的行中,主要部分是单词“uploadedfile”。这个词必须由php程序员指定,否则我们发送的文件将不会被替换。

请参考here