前端文件上传原理
16lz
2021-01-22
记:最近在做图片上传,但是一直对图片上传的概念模糊不清,所以查阅了一些文档,现在对基本原理有了一个认识
前端网页文件上传一般使用 <input type="file" />
来实现。
- 在 HTML 文档中
<input type="file" />
标签每出现一次,一个 FileUpload 对象就会被创建。 - 该标签包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件,该标签的 value属性保存了用户指定的文件的名称。
- 多选:标签可以通过添加 multiple 属性来支持多选;如果选择了多个文件, 这个值表示第一个被选择的文件路径. JavaScript 可以通过 Input 的 FileList 属性获取到其他的文件路径.
- 文件信息:可以通过 input.files 属性返回 — 返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表,列表包含图片的name,type,size等属性。
- 限制文件类型:你可以使用 input 的 accept 属性,accept 属性接受一个逗号分隔的 MIME 类型字符串。如:
accept="image/png, image/jpeg" or accept=".png, .jpg, .jpeg" — PNG/JPEG
- 选择文件会触发input的onchange事件;
- 上传:上传文件前 使用FileReader对象读取指定file的文件,并将文件转换为二进制字符串, 并将xhr对象, overrideMimeType 属性设置为
text/plain; charset=x-user-defined-binary
, 最终后台接收到二进制后再做具体处理。
var reader = new FileRender();
xhr.open(“POST”, url);
xhr.overrideMimeType(‘text/plain; charset=x-user-defined-binary’);
reader.onload = function(evt) {
xhr.send(evt.target.result);
};
reader.readAsBinaryString(file);
更详细的 MDN-input file,MDN-Using files
更多相关文章
- Javascript XML DOM将属性设置为特定元素
- 浏览器独立文件io在javascript中
- 为什么我收到此错误:“未捕获的TypeError:无法读取未定义的属性'标
- 上传文件进度条(笔记)
- 在多个文件中需要相同的模块
- 两个svg文件用javascript合并的问题?
- 将JavaScript命名空间拆分为多个文件
- 打字稿:无法访问类属性[重复]
- 创建一个对外界只读的属性,但是我的方法仍然可以设置