簡體   English   中英

POST請求在cURL中成功,但在Java中失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM