2011-05-24 118 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