[英]POST request succeeds in cURL but fails in Java
以下是使用PHP上傳文件的代碼段。 我是一名Android開發人員,我想上傳文件。 這意味着我必須將POST請求發送到包含此腳本的URL。
如果要上傳文件,應該使用什么參數名稱?
的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"];
}
當我嘗試使用cURL時,文件已成功上傳,但是當我通過Java進行上傳時,它失敗了。
卷曲
curl -F file=@call_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();
}
});
對此回答。 但是盡管如此,還是有一個解釋。
一個人不能讀完二進制文件(作為文本)。 這樣就產生了行尾,空字符,字符編碼以及再次使其變為二進制的問題。
通常情況下,無需先將所有content
讀入內存即可獲取InputStream(此處為content
)並將其流式傳輸出去。
import org.apache.commons.fileupload.util.Streams;
OutputStream out = response.getOutputStream();
Streams.copy(content, out, false);
當然,在發布帶有文件上傳的表單時,請遵循上述答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.