2012-04-19 431 views
0

以下是使用PHP上傳文件的片段。我是Android開發人員,我想上傳文件。這意味着我必須向包含此腳本的URL發送POST請求。POST請求在cURL中成功,但在Java中失敗

如果我想上傳文件,我應該使用什麼參數名稱?

PHP

if (file_exists("upload/" . $_FILES["file"]["name"])) { 
    echo $_FILES["file"]["name"] . " already exists. "; 
} else { 
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
    echo "https://some.site/upload/" . $_FILES["file"]["name"]; 
} 

當我嘗試捲曲,該文件被上傳成功,但是當我通過Java做到這一點,它失敗。

捲曲

curl -F [email protected]_me_now_2.wav http://some.site/upload/ 

Java代碼的

File f = new File("call_me_now_11.wav"); 

    HttpPost filePost = new HttpPost("https://some.site/upload/"); 
    FileEntity fileEntity = new FileEntity(f, "audio/wav"); 
    filePost.setEntity(fileEntity); 

    HttpClient client = new DefaultHttpClient(); 
    client.execute(filePost, new BasicResponseHandler() { 

     @Override 
     public String handleResponse(HttpResponse response) 
       throws HttpResponseException, IOException { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 

      int c = 0; 
      StringBuilder builder = new StringBuilder(); 
      while((c = content.read()) != -1) { 
       builder.append((char) c); 
      } 
      System.out.println(builder.toString()); 

      return builder.toString(); 
     } 
    }); 
+0

錯誤/堆棧跟蹤? – 2012-04-19 09:33:20

回答

1

通過this回答。但仍然是一個解釋。

無法完成二進制文件讀取(作爲文本)。這給行尾,nul字符,字符編碼帶來了問題,並再次使它成爲二進制。

一個通常會得到InputStream,這裏content,並流出來,沒有先讀入所有內存。

import org.apache.commons.fileupload.util.Streams; 

OutputStream out = response.getOutputStream(); 
Streams.copy(content, out, false); 

當然,在發佈帶有文件上傳的表單時,請按照提及的答案。

+0

你所建議的是處理響應的另一種方式。你能告訴我如何處理這個請求嗎? – 2012-04-23 05:32:03

+0

對不起,重讀我的答案我認爲它不足。表單輸入名稱應該是'file'。 – 2012-04-23 09:36:07

+0

解決,這正是我正在尋找的。謝謝。 – 2012-04-23 14:48:48

相關問題