前端上传文件,multipart-formdata,boundary的使用
上传文件需要使用 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
- 给文件流设置分隔符
- 给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的使用相关推荐
- http 协议上传文件multipart form-data boundary 说明--转载
原文地址:http://xixinfei.iteye.com/blog/2002017 含义 ENCTYPE="multipart/form-data" 说明: 通过 http ...
- Python Request POST 上传文件 Multipart/form-data
项目场景: 我的第一个博客:使用python request模块向服务器接口上传图片 问题描述 某app上传图片接口的包 原因分析: 问题的关键词:请求头 Content-Type:multipart ...
- 关于前端上传文件到后台,文件大小超出限制,导致上传失败的解决办法。
文章出处:Jiangkuobo,微信:jkb_267460 文章目录 前言 一.使用elementPlus上传图片,出现的问题. 二.验证猜想 1.验证方式: 2.测试结果: 3.我的猜想与验证 三. ...
- html5封装图片,简单封装前端上传文件/图片
前言 最近项目会一直用到各种类型的上传文件的功能, 所以就基于elment-ui简单的做了一个封装, 比较好用 正文 引入 import TestUpload from '../components/ ...
- 关于前端上传文件到七牛云的一些笔记
关于前端上传文件到七牛云的一些心得 前言 申请账户 具体步骤 算了 小技巧 七牛云没有监控上传进度和上传错误的 API ?(JS SDK) React 更新 state 中的数组不能触发动画效果? 前 ...
- 关于使用jQuery前端上传文件
关于使用jQuery前端上传文件 我们都知道 html中file类型的input可以直接读取本地的文件; 如果使用form表单的话,那么action = url 这就会上传完文件会刷新页面,返回值就会 ...
- 前端上传文件status状态为0?
前端上传文件 status=0 ??? status状态码基本上是 100.200.300.400.500 , 0 还是第一次遇到过 status为0说明接口在调用之前,就已经取消了.也就是说根 ...
- vue method ajax上传文件,前端上传文件追根溯源_和_antd_vue上传文件实例
背景 平,过现前个能文使近记接的端问对字用近记接时工作中经常会遇到需要上传文件的情况,如果你用ant design 或者element ,它们都提供了上传的组件. 我们分别来看一下element 和 ...
- 【转载】前端上传文件,python作为后端接收并保存到本地--Tornado上传文件--分片上传文件--更换pip下载源
背景:在改造caffe自带demo时,增加了一个更新模型的功能,需要将用户训练好的caffemodel上传到服务器,并替换到已经存在的caffemodel文件,重新加载上传的caffemodel文件并 ...
最新文章
- 聊聊性能测试、操作系统优化对性能测试的影响,以及如何优化操作系统
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
- 扫描枪读条码数据在单片机串口电路的读取与显示
- 【Linux】一步一步学Linux——tree命令(23)
- 同步外部接口数据的一些记录和分享
- 图灵测试是什么?为什么AlphaGo那么牛却过不了?
- 开源项目面试重要吗_开源是最重要项目的骨干
- IaaS、PaaS和SaaS的区别
- 升级到NVelocity1.1版本
- 从零开始刷Leetcode——数组(448.485.509)
- easyUI之新增,下架以及上架
- js中undefined
- PID控制器原理详解
- 著者四角号码查询_著者姓名汉语拼音与四角号码数字混编书次号的应用
- 网络映射iscsi服务器,群晖iSCSI管理器连接网络硬盘详细介绍和配置使用说明
- 在iOS当中发送电子邮件和短信
- 社区发现算法FastUnfolding的GraphX实现(转载)
- java随机生成人名
- GooglePlay各种权限AndroidManifest.xml权限配置及说明
- 零基础入门Jetson Nano——MediaPipe双版本(CPU+GPU)的安装与使用