POST请求在cURL中成功,但在Java中失败

时间:2012-04-19 09:16:37

标签: java php http post https

以下是使用PHP上传文件的代码段。我是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 -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();
        }
    });

1 个答案:

答案 0 :(得分:1)

this回答。但不过是一个解释。

无法读取二进制文件(如文本)。这会产生行结尾,空字符,字符编码以及再次使其成为二进制文件的问题。

一个人通常会得到InputStream,这里是content,并将其流出,而不是先读入内存。

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

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

当然,在发布带有文件上传的表单时,请按照上述答案进行操作。