java http post上传文件_Java通过HTTP POST请求上传文件

我想创建一个Java应用程序来执行以下在Windows上的CURL中工作。Java通过HTTP POST请求上传文件

curl -x XXX.XXX.XXX.XXX:8080 -X POST --data-binary "@C:\Users\XXXXX\Documents\batch2.txt" http://XXXXX.XXX.XXXXXX.XXX/XX/XXXXXXX/XX/XXXXXXX/XXXXXXX

我已经能够复制调用取文件的内容,并张贴使用HttpURLConnection类然而,这是不可行的直接的URL在Java中,宁愿使用文件的方法,因为它可以是相当大。

我目前拥有的代码是:

import java.io.File;

import org.apache.http.HttpEntity;

import org.apache.http.HttpHost;

import org.apache.http.HttpResponse;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.apache.http.entity.mime.HttpMultipartMode;

public class PostFile {

public static void main(String[] args) throws Exception {

CloseableHttpClient httpclient = HttpClients.createDefault();

HttpPost httppost = new HttpPost("http://XXXXX.XXX.XXXXXX.XXX/XX/XXXXXXX/XX/XXXXXXX/XXXXXXX");

RequestConfig requestConfig = RequestConfig.copy(RequestConfig.DEFAULT)

.setProxy(new HttpHost("XXX.XXX.XXX.XXX", 8080))

.build();

httppost.setConfig(requestConfig);

httppost.addHeader("Content-Type","data/binary");

File file = new File("C:/Users/XXXXXX/Documents/batch2.txt");

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

builder.addBinaryBody("batch", file);

final HttpEntity entity = builder.build();

httppost.setEntity(entity);

System.out.println("executing request " + httppost.getRequestLine() + httppost.getConfig());

HttpResponse response = httpclient.execute(httppost);

HttpEntity resEntity = response.getEntity();

System.out.println(response.getStatusLine());

if (resEntity != null) {;

System.out.println(EntityUtils.toString(resEntity));

}

httpclient.close();

}

}

我遇到的问题是,它不提供相同的反应,好像是没有要发布的文件。

2016-10-03

Charabon

+0

'--data-binary'意味着'-X POST',所以你不需要给出-X'选项,它也暗示'Content-Type:application/x-www- form-urlencoded“(参见[curl manpage](https://curl.haxx.se/docs/manpage.html#-d)),但是你的Java代码正在发送'Content-Type:data/binary',它是可能是你的问题。至于*“不提供相同的答复”*,如果您与我们分享这两个答复,那么帮助您会更容易。 –

+0

成功的回应=批次编号-XXXXX 错误的响应=批次为空 –

+0

我的意思是,显示完整响应,包括标题。无论如何,我只注意到你的Java代码也发送文件为*多部分*。你似乎有'curl'命令是“上传”文件的想法。不是这样。它只是将文件作为表单编码的POST内容发送到服务器,这意味着该文件应该遵循该内容格式。你只需要在Java中设置正确的“Content-Type”,并直接对文件内容进行流式处理。 –

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值