当前位置: 首页 > news >正文

山东天成建设工程有限公司网站外贸邦官网

山东天成建设工程有限公司网站,外贸邦官网,网站建设专业知识应用,企业微信开发文档最近在做一个文件上传的开放接口#xff0c;用到Content-Type: multipart/form-data这种请求类型#xff0c;特地做了一些研究和记录。在最初的 http协议中#xff0c;并没有上传文件方面的功能。RFC1867为 http协议添加了这个能力。常见的浏览器#xff0c;如 Microsoft I… 最近在做一个文件上传的开放接口用到Content-Type: multipart/form-data这种请求类型特地做了一些研究和记录。在最初的 http协议中并没有上传文件方面的功能。RFC1867为 http协议添加了这个能力。常见的浏览器如 Microsoft IE, Mozila, Opera, ChromeSafari等都已经支持。按照此规范将用户指定的文件发送到服务器。服务器端的程序如 java等可以按照此规范解析出用户发送来的文件。RFC1867定义的请求格式如下示例------ZcyOpenBoundaryEEpIo3GVWKVCPrX8Content-Disposition: form-data; name_data_Content-Type: text/plain; charsetUTF-8Content-Transfer-Encoding: 8bit{fileName:redis-use.png,bizCode:1071}------ZcyOpenBoundaryEEpIo3GVWKVCPrX8Content-Disposition: form-data; namefile; filenamedeaultFilenameContent-Type: application/octet-streamContent-Transfer-Encoding: binaryÿØÿàJFIFÿÛC $. ,#(7),01444982.342ÿÛC ÿÀ22ÿÄÿÄ3!1AaQq¡Á2BR#3¢±ÿÄÿÄ !13QAÿÚ?ÇÛ{çZ3ãçjãêµrÖåcñ÷·µO åÃKë¥Tv®ÊhíI§~2,ºFT4É÷åò©Ëë¹¢Y¼9 etúÍDÞØâ¡1Mº :î~þõStY)vè°l¦t¶îðâHùËEÿ¤R3µ³/îEæÞb¿¸Í §\6£O­J#4Ý÷åFÀÕh_E5âw¢§ßg®÷1V¯/­Å·Ô³nDÞ9ÏÒªi ,xïS^2Ûx¦ÊF²åÐåHûÒ¬±}K;h×ZóøÂîïÝÐàx®Z4]©¦àr_Ç-yç½q4Ó2FVÎÀáïåì\Ó¯á×%½6[Pë9lëÔcJcæ;-²½ØÒPÝÈË5Éδ©%¶·ÜFc«1%±ÛSL?´íã8¢¶yzc^]»Tm8·SsÉ1æQwGËþÔÁ¢ÊQçYµmÁÐýimclä4§H35ÕÛlÅp4¥,·(íA~xçO~]êjWÒªçók­gëæ%¼lª27ër[áL¤ñÌr7¦II?¹4©Q^Í,$¤gw9î(¬ÃùÝÆSþTØÿ쯨]?WÞ«¾%b¯C]EVÊÎoþÂ:Ùê¦î,¨¡Ìw¢Ô0K7£ô.¬:TÒ${B0ª 1E¢æUãÉéôïEQ ÿÙ...省略部分内容...------ZcyOpenBoundaryEEpIo3GVWKVCPrX8--这里的----ZcyOpenBoundaryEEpIo3GVWKVCPrX8是规范中定义的boundary。http传输的内容通过boundary进行了分割以--${boundary}开始并以${boundary}--结尾。明白了以上内容我们再来看如何使用multipart/form-data进行文件上传。以HttpClient为例进行说明其他工具大同小异。首先想到的就是要配置 http请求头信息中的Content-Type字段没错我们来看如何进行设置httpPost.addHeader(Content-Type, multipart/form-data; boundary----ZcyOpenBoundaryEEpIo3GVWKVCPrX8);注意这里multipart/form-data 后面要跟上boundary。当然我们也可以不进行Content-Type设置一般工具都会为我们自动生成规范的Content-Type自动生成过程不在本次讨论范围内读者可以自行阅读代码。继续我们设置了请求头中的boundary以后还要确保与代码片段1中的boundary保持一致否则服务端无法读取到请求体信息。服务端正常情况下收到的请求是下面的样子当然上图是以Spring框架为例其他框架或语言亦大同小异。那么怎么保证请求头中的boundary与代码片段1中的boundary一致呢一种办法是模拟http请求手写拼接报文String BOUNDARY ----ZcyOpenBoundaryEEpIo3GVWKVCPrX8;StringBuffer sb  new StringBuffer();// 发送字段for(int i0; i sb sb.append(--); sb sb.append(BOUNDARY); sb sb.append(\r\n); sb sb.append(Content-Disposition: form-data; name\ props[i] \\r\n\r\n); sb sb.append(URLEncoder.encode(values[i])); sb sb.append(\r\n);}// 发送文件:sb sb.append(--);sb sb.append(BOUNDARY);sb sb.append(\r\n);sb sb.append(Content-Disposition: form-data; name\1\; filename\1.txt\\r\n);sb sb.append(Content-Type: application/octet-stream\r\n\r\n);byte[] data sb.toString().getBytes();byte[] end_data (\r\n-- BOUNDARY --\r\n).getBytes();// 设置HTTP头hc.setRequestProperty(Content-Type, MULTIPART_FORM_DATA ; boundary BOUNDARY);hc.setRequestProperty(Content-Length, String.valueOf(data.length file.length end_data.length));// 输出output client.openOutputStream();output.write(data);output.write(file);output.write(end_data);......当然以上方式比较原始容易出错我们更喜欢用高级语言。下面还是以HttpClient为例String result  ;String boundary ----ZcyOpenBoundaryEEpIo3GVWKVCPrX8;try (CloseableHttpClient httpClient HttpClients.createDefault()){ String fileName file.getName(); HttpPost httpPost new HttpPost(url); //设置请求头    httpPost.setHeader(Content-Type,multipart/form-data; boundaryboundary); MultipartEntity multipartEntity new MultipartEntity(HttpMultipartMode.STRICT, boundary, Charset.defaultCharset());     ...省略内容... httpPost.setEntity(multipartEntity); // 执行提交 HttpResponse response httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() 200) { //响应 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();} System.out.println(result  result);注意上述代码中除了设置header头中的boundary外还要同时设置MultipartEntity对象中的boundary这样就保持一致啦。至此服务端已经可以获取到期待已久的文件流信息了。
http://www.pierceye.com/news/209286/

相关文章:

  • 涿州建设局网站苏州市高新区建设局网站
  • 个人soho要怎么做企业网站成都包装设计公司
  • 网站开发 chrome浏览器崩溃ruhe用dw做网站
  • 全屏网站 图片优化个人网站cms系统
  • 做我女朋友程序网站邵东做网站
  • 建设网站如何挂到网上wordpress首页添加幻灯
  • 汕头正规网站建设模板总部城乡建设网站 资料员
  • vs 2017c 怎么建设网站网站建设的数字化和互联网化
  • 南昌网站设计公司海南营销网站建设
  • 购物网站素材个人搭建网站教程
  • 青岛网站建设哪里好模板建站服务公司
  • 青色网站欣赏wordpress中文购物
  • 建站培训全国住房与城乡建设部网站
  • 唐山网站建设方案策划沧州网站建设联系电话
  • 网页制作和网站开发实验报告logo设计品牌
  • 摄影后期教程网站百度指数1000搜索量有多少
  • wp网站建设模板什么是网站的原型
  • 园林绿化网站建设上海著名室内设计公司
  • 大连市住房与城乡建设部网站公司要制作网站
  • 郑州做网站七彩科技企业网站做的漂亮
  • 如何用ps做网站页面设计企业网站备案价格
  • 禅城网站建设价格青岛企业自助建站系统
  • 平阳住房和城乡建设厅网站建设银行龙卡信用卡在境外网站支付
  • 关于网站开发的论文软件开发合同模板免费
  • 军队房地产与建设工程法律实务在哪个网站可以购买深圳市盐田区住房建设局网站
  • 网站虚拟主机空间喊别人做的网站不肯给代码
  • 导游是什么商丘seo公司
  • 25个网站网页怎么截图
  • 中国贸易网是什么网站wordpress导航横着
  • 淄博桓台网站建设方案怎么样做网站代