2014-03-03 98 views
5

我已經嘗試了很多方法和答案,描述堆棧溢出和其他博客上傳文件從我的android應用程序到我的服務器,但他們都沒有爲我工作。使用httppost上傳文件android

我用httpclient4.3.3.jar,httpcore4.3.3.jar和httpmime4.3.3.jar

我沒有得到任何錯誤消息和我的應用程序工作正常。但沒有數據進入我的服務器,我使用的是PHP服務器,我的服務器端代碼如下。

$file_path = "uploads/"; 

$file_path = $file_path.basename($_FILES['file_data']['name']); 
if(move_uploaded_file($_FILES['file_data']['tmp_name'], $file_path)) { 
    echo "success"; 
} else{ 
    echo "fail"; 
} 

請給我任何工作示例或代碼與所需的庫。這麼多天在做它..請幫助我一個完整的答案。

+0

你能後,你'execute'請求的一部分嗎? – Rajesh

+0

請嘗試http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106.檢查其上傳方法。可能有幫助 –

+0

嘗試此方法http://stackoverflow.com/a/5220954/ 403255 –

回答

9

試試這個。

public int uploadFile(String sourceFileUri) { 
     String fileName = sourceFileUri; 

     HttpURLConnection conn = null; 
     DataOutputStream dos = null; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     File sourceFile = new File(sourceFileUri); 

     if (!sourceFile.isFile()) { 

      dialog.dismiss(); 

      Log.e("uploadFile", "Source File not exist :" 
           +uploadFilePath + "" + uploadFileName); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText.setText("Source File not exist :" 
          +uploadFilePath + "" + uploadFileName); 
       } 
      }); 

      return 0; 

     } 
     else 
     { 
      try { 

       // open a URL connection to the Servlet 
       FileInputStream fileInputStream = new FileInputStream(sourceFile); 
       URL url = new URL(upLoadServerUri); 

       // Open a HTTP connection to the URL 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setDoInput(true); // Allow Inputs 
       conn.setDoOutput(true); // Allow Outputs 
       conn.setUseCaches(false); // Don't use a Cached Copy 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
       conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
       conn.setRequestProperty("uploaded_file", fileName); 

       dos = new DataOutputStream(conn.getOutputStream()); 

       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename="" 
             + fileName + """ + lineEnd); 

       dos.writeBytes(lineEnd); 

       // create a buffer of maximum size 
       bytesAvailable = fileInputStream.available(); 

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

       // read file and write it into form... 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       while (bytesRead > 0) { 

       dos.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 

       // send multipart form data necesssary after file data... 
       dos.writeBytes(lineEnd); 
       dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

       // Responses from the server (code and message) 
       serverResponseCode = conn.getResponseCode(); 
       String serverResponseMessage = conn.getResponseMessage(); 

       Log.i("uploadFile", "HTTP Response is : " 
         + serverResponseMessage + ": " + serverResponseCode); 

       if(serverResponseCode == 200){ 

        runOnUiThread(new Runnable() { 
         public void run() { 

          String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
              +" http://www.androidexample.com/media/uploads/" 
              +uploadFileName; 

          messageText.setText(msg); 
          Toast.makeText(UploadToServer.this, "File Upload Complete.", 
             Toast.LENGTH_SHORT).show(); 
         } 
        });     
       }  

       //close the streams // 
       fileInputStream.close(); 
       dos.flush(); 
       dos.close(); 

      } catch (MalformedURLException ex) { 

       dialog.dismiss(); 
       ex.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("MalformedURLException Exception : check script url."); 
         Toast.makeText(UploadToServer.this, "MalformedURLException", 
                  Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
      } catch (Exception e) { 

       dialog.dismiss(); 
       e.printStackTrace(); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("Got Exception : see logcat "); 
         Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       Log.e("Upload file to server Exception", "Exception : " 
               + e.getMessage(), e); 
      } 
      dialog.dismiss();  
      return serverResponseCode; 

     } // End else block 
    } 

您需要在您的項目添加下列JAR,我在這裏給你下載直接的聯繫。

  1. httpclient-4.2.2.jar
  2. httpmime-4.0.jar
+0

我需要httppost方法上傳文件,你能給我任何工作代碼和正確的庫文件 –

+3

**這是上傳文件在服務器上的工作示例,你只需要根據你的代碼修改這些代碼**從這裏下載庫, httpclient-4.2.2.jar](http://www.java2s.com/Code/JarDownload/httpclient/httpclient-4.2.2.jar.zip)和[httpmime-4.0.jar](http:// www。 java2s.com/Code/JarDownload/httpmime/httpmime-4.0.jar.zip)。 –

+1

感謝它的工作..但我需要httppost方法文件上傳..你有什麼想法。 –