【问题标题】:POST request succeeds in cURL but fails in JavaPOST 请求在 cURL 中成功,但在 Java 中失败
【发布时间】:2012-04-19 09:16:37
【问题描述】:

以下是使用PHP上传文件的sn-p。我是一名 Android 开发人员,我想上传一个文件。这意味着我必须向包含此脚本的 URL 发送 POST 请求。

如果我想上传文件,我应该使用什么参数名称?

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

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();
        }
    });

【问题讨论】:

    标签: java php http post https


    【解决方案1】:

    this 回答。不过还是有解释的。

    无法读取已完成的二进制文件(作为文本)。这会导致行尾、空字符、字符编码以及再次使其成为二进制文件的问题。

    通常会获取 InputStream,这里是 content,然后将其流式传输出来,而无需先将所有内容读入内存。

    import org.apache.commons.fileupload.util.Streams;
    
    OutputStream out = response.getOutputStream();
    Streams.copy(content, out, false);
    

    当然,在发布带有文件上传的表单时,请遵循上述答案。

    【讨论】:

    • 您所建议的是处理响应的不同方式。你能告诉我如何处理这个请求吗?
    • 抱歉重读我的回答,我认为它不够。表单输入名称应为file
    • 解决了,这正是我要找的那个。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2018-06-05
    相关资源
    最近更新 更多