上传文件需要使用 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFIc14z39Lb6Leu6y ;

  • multipart/form-data 是文件传输的content-type 格式
  • boundary 是分隔符,分隔多个文件、表单项。如果不自己设置,默认由浏览器自动产生

1. 使用方式

1.1 html 表单点击提交

enctype=“multipart/form-data”, method=post, type=“file” 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型,以提高二进制文件的传输效率。

<form action="upFile.php" enctype="multipart/form-data" method="post">
<input name="myflie" type="file" />
<input type="submit" />

1.2 通过api 提交文件

通过FormData 对象将文件数据传入。
content-type 设置为false 或者不写。浏览器会自动识别为multipart/form-data;并设置boundary 分割符号

    // FormData创建const formData = new FormData();formData.append('file', blob);formData.append('updateMode', 'false');// api调用const httpOptions = {headers: new HttpHeaders({// 'Content-Type': 'multipart/form-data', 自动会生成Content-TypeAuthorization:  sessionStorage.getItem('Authorization')})};this.http.post(``, formData, { observe: 'response', ...httpOptions }).pipe(catchError(this.shareService.handleError()));

2. 概念

在最初的 http 协议中,没有上传文件方面的功能。 rfc1867为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来的文件。Microsoft IE, Mozila, Opera 已经支持此协议,在网页中使用一个特殊的 form 就可以发送文件。绝大部分 http server ,包括 tomcat ,已经支持此协议,可接受发送来的文件。各种网页程序,如 php, asp, jsp 中,对于上传文件已经做了很好的封装。

3. multipart-formdata 作用

为了上传文件,等二进制流

4. boundary 分割符号

4.1自定义boundary

  1. 给文件流设置分隔符
  2. 给content-type 设置同样的分割符
<!DOCTYPE html>
<html>
<head><title></title>
</head>
<body>
<input type="file" id="file">
<button id="trigger">trigger</button>
<script type="text/javascript">var file = document.getElementById("file");var trigger = document.getElementById("trigger");trigger.addEventListener("click", function(e){var reader = new FileReader();reader.readAsDataURL(file.files[0].slice());reader.addEventListener("loadend", function(e){req = new XMLHttpRequest();req.overrideMimeType("text/plain");req.addEventListener("load", function(e){var img = document.createElement("img");img.src = e.target.response;document.body.appendChild(img);}, false);req.open("post", "./tmp_50.php");var sBoundary = "---------------------------" + Date.now().toString(16);req.setRequestHeader("Upgrade-Insecure-Requests", "1");req.setRequestHeader("Content-Type", "multipart\/form-data; boundary=" + sBoundary);var data = new Blob(["--" + sBoundary + "\r\n" + "Content-Disposition: form-data; name=\"payload\"; filename=\"payload.data\"" + "\r\n" + "Content-Type: application/octet-stream" + "\r\n" + "\r\n", reader.result, "\r\n" + "--" + sBoundary + "--" + "\r\n"], {type : 'application/octet-stream'});req.send(data);});

4.2 浏览器自动生成分隔符

不设置 content-type 浏览器就会自动识别,并生成

  headers: new HttpHeaders({// 'Content-Type': 'multipart/form-data',Authorization:  sessionStorage.getItem('Authorization')})

前端上传文件,multipart-formdata,boundary的使用相关推荐

  1. http 协议上传文件multipart form-data boundary 说明--转载

    原文地址:http://xixinfei.iteye.com/blog/2002017 含义 ENCTYPE="multipart/form-data" 说明:  通过 http ...

  2. Python Request POST 上传文件 Multipart/form-data

    项目场景: 我的第一个博客:使用python request模块向服务器接口上传图片 问题描述 某app上传图片接口的包 原因分析: 问题的关键词:请求头 Content-Type:multipart ...

  3. 关于前端上传文件到后台,文件大小超出限制,导致上传失败的解决办法。

    文章出处:Jiangkuobo,微信:jkb_267460 文章目录 前言 一.使用elementPlus上传图片,出现的问题. 二.验证猜想 1.验证方式: 2.测试结果: 3.我的猜想与验证 三. ...

  4. html5封装图片,简单封装前端上传文件/图片

    前言 最近项目会一直用到各种类型的上传文件的功能, 所以就基于elment-ui简单的做了一个封装, 比较好用 正文 引入 import TestUpload from '../components/ ...

  5. 关于前端上传文件到七牛云的一些笔记

    关于前端上传文件到七牛云的一些心得 前言 申请账户 具体步骤 算了 小技巧 七牛云没有监控上传进度和上传错误的 API ?(JS SDK) React 更新 state 中的数组不能触发动画效果? 前 ...

  6. 关于使用jQuery前端上传文件

    关于使用jQuery前端上传文件 我们都知道 html中file类型的input可以直接读取本地的文件; 如果使用form表单的话,那么action = url 这就会上传完文件会刷新页面,返回值就会 ...

  7. 前端上传文件status状态为0?

    前端上传文件 status=0 ???    status状态码基本上是 100.200.300.400.500 , 0 还是第一次遇到过 status为0说明接口在调用之前,就已经取消了.也就是说根 ...

  8. vue method ajax上传文件,前端上传文件追根溯源_和_antd_vue上传文件实例

    背景 平,过现前个能文使近记接的端问对字用近记接时工作中经常会遇到需要上传文件的情况,如果你用ant design 或者element ,它们都提供了上传的组件. 我们分别来看一下element 和 ...

  9. 【转载】前端上传文件,python作为后端接收并保存到本地--Tornado上传文件--分片上传文件--更换pip下载源

    背景:在改造caffe自带demo时,增加了一个更新模型的功能,需要将用户训练好的caffemodel上传到服务器,并替换到已经存在的caffemodel文件,重新加载上传的caffemodel文件并 ...

最新文章

  1. 聊聊性能测试、操作系统优化对性能测试的影响,以及如何优化操作系统
  2. MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
  3. 扫描枪读条码数据在单片机串口电路的读取与显示
  4. 【Linux】一步一步学Linux——tree命令(23)
  5. 同步外部接口数据的一些记录和分享
  6. 图灵测试是什么?为什么AlphaGo那么牛却过不了?
  7. 开源项目面试重要吗_开源是最重要项目的骨干
  8. IaaS、PaaS和SaaS的区别
  9. 升级到NVelocity1.1版本
  10. 从零开始刷Leetcode——数组(448.485.509)
  11. easyUI之新增,下架以及上架
  12. js中undefined
  13. PID控制器原理详解
  14. 著者四角号码查询_著者姓名汉语拼音与四角号码数字混编书次号的应用
  15. 网络映射iscsi服务器,群晖iSCSI管理器连接网络硬盘详细介绍和配置使用说明
  16. 在iOS当中发送电子邮件和短信
  17. 社区发现算法FastUnfolding的GraphX实现(转载)
  18. java随机生成人名
  19. GooglePlay各种权限AndroidManifest.xml权限配置及说明
  20. 零基础入门Jetson Nano——MediaPipe双版本(CPU+GPU)的安装与使用

热门文章

  1. 《工程学导论》读书笔记第二章工程与科学
  2. Python的10086查询系统模拟
  3. go开发之restful等幂性
  4. 计算机网络基础第5版教案,计算机网络基础 第5章教案
  5. 理解电路:从电报机到门电路
  6. 神仙传服务器修改,神仙传
  7. Image through Atmospheric Turbulence笔记(一)
  8. 听完计算机讲座的感想,听讲座心得体会5篇
  9. C语言求1到10以内的约数,倍数和约数 教学设计资料
  10. IE11 error object doesn't support property or method 'fill'