httpclient通过post multipart/form-data 上传文件

httpclient通过post multipart/form-data 上传文件


public static String httpClientUploadFile(String url, File file) {
                CloseableHttpClient httpClient = HttpClients.createDefault();
                String result = "";
                //每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。
                String boundary ="--------------4585696313564699";
                try {
                        //文件名
                        String fileName = file.getName();
                        HttpPost httpPost = new HttpPost(url);
                        //设置请求头
                        httpPost.setHeader("Content-Type","multipart/form-data; boundary="+boundary);

                        //HttpEntity builder
                        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                        //字符编码
                        builder.setCharset(Charset.forName("UTF-8"));
                        //模拟浏览器
                        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                        //boundary
                        builder.setBoundary(boundary);
                        //multipart/form-data
                        builder.addPart("multipartFile",new FileBody(file));
                        // binary
//            builder.addBinaryBody("name=\"multipartFile\"; filename=\"test.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
                        //其他参数
                        builder.addTextBody("filename", fileName,  ContentType.create("text/plain", Consts.UTF_8));
                        //HttpEntity
                        HttpEntity entity = builder.build();
                        httpPost.setEntity(entity);
                        // 执行提交
                        HttpResponse response = httpClient.execute(httpPost);
                        //响应
                        HttpEntity responseEntity = response.getEntity();
                        if (responseEntity != null) {
                                // 将响应内容转换为字符串
                                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        try {
                                httpClient.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
                System.err.println("result"+result);
                return result;
        }

        //main 方法
        public static void main(String[] args) {
                httpClientUploadFile("http://127.0.0.1:8080/upload",new File("d:/test/test.docx"));
        }

原文地址:https://blog.51cto.com/5013162/2435846

时间: 2024-11-13 04:18:29

httpclient通过post multipart/form-data 上传文件的相关文章

如何使用multipart/form-data格式上传文件(POST请求时,数据是放在请求体内,而不是请求头内,在html协议中,用 “\r\n” 换行,而不是 “\n”)

在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的方式.最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器. 表单形式上传附件 具体的步骤是怎样的呢? 首先,客户端和服务器建立连接(TCP协议). 第二,客户端可以向服务器端发送数据.因为上传文件实质上也是向服务器端发送请求. 第三,客户端按照符合“m

[转]如何使用multipart/form-data格式上传文件

form表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是"application/x-www-form-urlencoded",不能用于文件上传:只有使用了multipart/form-data,才能完整的传递文件数据. 有时,在网络编程过程中需要向服务器上传文件.Multipart/form-data是上传文件的一种方式. Multipart/form-data其实就是浏览器用表单上传文件的

使用python或robotframework调multipart/form-data接口上传文件

这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个更强大.下面具体介绍一下python-requests及robotframework-RequestsLibrary实现multipart/form-data接口上传文件.1.从fiddler查看接口长这样:Header: WebForms: 2.python-requests实现 #!/usr/b

django Form组件 上传文件

上传文件 注意:FORM表单提交文件要有一个参数enctype="multipart/form-data" 普通上传: urls: url(r'^f1/',views.f1), url(r'^f2/',views.f2), views: def f1(request): if request.method == "GET": return render(request,'f1.html') else: import os #导入os模块 #request.get /

笔谈HTTP Multipart POST请求上传文件

公司一做iOS开发的同事用HTTP Multipart POST请求上传语音数据,但是做了两天都没搞定,项目经理找到我去帮忙弄下.以前做项目只用过get.post,对于现在这个跟服务器交互的表单请求我没有做过,但是程序员学习能力还是要有的,解决问题的方法和经验是很重要的.做过2000万用户量的业务sdk的开发,这点东西自然不在话下,优秀的程序员就是要有解决问题的能力与方法. 1) 接口地址 接口地址为:http://ip:port/upload 2) UploadRequest消息定义 Form

[转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件

开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xalion窑主的指导下,我使用了indy自带的TIdMultiPartFormDataStre am类,来提交上传的文件. 如果使用indy的idhttp,则调用这个方法,即可以提交Form. function Post(AURL: string; ASource: TIdMultiPartFormDat

Yii使用CForm类(Form builder)上传文件

模型(model) 首先需要一个文件上传的模型:FileUpload.php <?php class FileUpload extends CFormModel { public $image; /** * @return array validation rules for model attributes. */ public function rules() { return array( //note you wont need a safe rule here array('image

解决python发送multipart/form-data请求上传文件的问题

服务器接收文件时,有时会使用表单接收的方式,这意味着我们需要使用Python的requests上传表单数据和文件. 常用的方式一般如下: data = { 'name': 'nginx' } files = {'file': open("abc.csv", 'rb')} response = requests.post(url, data=data, files=files) files是封装好的参数,直接包括了文件内容,文件名,格式等,data则是表单内容,但这样做有一个问题,文件是

Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

原因是没有设置存放临时文件的文件夹,而错误提示中的struts.multipart.saveDir就是设置临时文件夹的属性,把该配置写到struts.properties文件中即可,如下: struts.multipart.saveDir = /tmp 如果此文件夹不存在,Struts 2会自动创建一个. 也可以在struts.xml配置文件中添加一个常量设置: <constant name="struts.multipart.saveDir" value="/tmp&

Jquery.form异步上传文件常见问题解决

Jquery.form常用方法我就不多说,主要说一下在使用过程中碰到的问题 1.提示 “xxxx” is not define 或者"xxx" is not a function 这种就检查下自己的代码,哪里粗心写错了单词,路径写的不正确,引用错了文件等等 2.使用ajaxForm函数写好方法后,点击按钮无反应 这种问题需要把按钮type="button"设置成 type="submit" 并且需要将按钮放置到<form></f