JavaScript文件获取与提交
来源:互联网 发布:ubuntu 镜像站 编辑:程序博客网 时间:2024/06/05 06:02
在前端开发的过程中,我们可能需要用到文件选择、文件处理、文件生成以及文件提交相关的功能。比如设置头像场景:
a、选择图片文件
b、裁剪原图片(通过canvas的绘图功能,本文不展开讲解)
c、生成裁剪过后的新图片
d、上传新图片作为头像
一、文件在JavaScript里面的存在形态
HTML5提供了文件相关的接口(不兼容IE9及以下):Blob, FileList, File, FileReader类型。
1、Blob对象表示一个不可变的、原始数据(可以是文件数据、JavaScript数据等)的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式。详情见https://developer.mozilla.org/zh-CN/docs/Web/API/Blob
2、File类继承自Blob类,所以File对象拥有Blob对象的方法和属性,并且扩展出自己的方法和属性。详情见https://developer.mozilla.org/zh-CN/docs/Web/API/File
FileList是由File对象组成的类数组对象。看如下代码:
<input type="file" name="file" id="id">
当选择了一个文件之后(假设选择的是图片img.png),执行以下JavaScript代码:
document.getElementById('id').files //控制台输出:FileList对象:{0: File, length: 1}
document.getElementById('id').files[0] //控制台输出: File对象,即我们选择的img.png和图片相关信息组成对象,具体如下:
{
lastModified:1497344366388,
lastModifiedDate:Tue Jun 13 2017 16:59:26 GMT+0800 (中国标准时间),
name:"img.png",
size:75566,
type:"image/png"
}
3、FileReader对象提供读取文件的接口。详情见https://developer.mozilla.org/en-US/docs/Web/API/FileReader
看如下代码:
filereader = new FileReader();
filereader.readAsDataURL(document.getElementById('id').files[0]);
console.log(filereader); //输出filereader对象,result属性即是读取结果。
注:FileReader对象有readAsDataURL、readAsBinaryString(IE10和IE11不支持)、readAsArrayBuffer、readAsText四种读取文件的方法,分别对应相应的result结果类型。方法的参数,即读取的文件是Blob或File对象。
4、如上,可总结得出,文件在JavaScript中存在的形态可以是:Blob对象、File对象、FileList对象和FileReader对象的result属性(有四种格式: DataURL、BinaryString、ArrayBuffer和Text)。
二、文件获取。JavaScript可以通过如下途径获取文件
1、如上第二小点,通过<input type="file" name="file" id="id">,然后选择文件后,即可在JavaScript中获取文件对象。
2、HTML5的canvas元素有对应的生成图片文件的接口。看如下代码:
<canvas id="cvs"></canvas>
<script type="text/javascript">
document.getElementById('cvs').toBlob(function(blob){
console.log(blob); //输出blob对象
});
document.getElementById('cvs').toDataURL(); //输出base64编码的图片文件字符串:"data:image/png;base64,iVB..................."
</script>
3、ajax请求获取的Blob对象
4、WebSocket推送的Blob或ArrayBuffer
三、文件上传
1、传统的表单提交
2、HTML5的XMLHttpRequest对象新功能配合FormData对象,可实现上传Blob、File和FlieList类型的文件。
比如使用ajax上传时:
var formData = new FormData();
formData.append('file', imgBlob); //imgBlob是一个Blob对象
$.ajax({
url: 'xxxxxxxx',
processData: false,
type: 'post',
dataType: 'json',
contentType: false,
data: formData
})
四、文件在页面内的引用
URL.createObjectURL方法可以以Blob或File对象作为参数,返回DOMString指向对应的文件对象。如将图片文件的DOMString赋值给img的src属性,即可展示图片。
- JavaScript文件获取与提交
- javascript获取文件后缀名
- git-获取与n次提交前比对有变化的文件并导出
- 表单提交文件无法获取的解决办法
- HttpPostedFile 获取当前页面提交的文件
- webbrowser - cookies的获取与提交
- jquery-$.ajax提交与$.get获取数据
- JAVASCRIPT 获取 XML 文件内容
- 其他-javascript获取表单的信息并用ajax提交
- hdfs 文件提交与mr作业提交流程分析
- javascript提交
- JavaScript 提交
- Git:提交文件与 时光机~~
- struts2中的表单提交与文件上传下载
- svn提交、更新与文件冲突
- 【Java】向一个页面发送post请求并获取其处理之后的结果与用javascript创建一个表单后提交的安全性
- Javascript + Ruby on Rails: 提交上传文件之前检验文件类型
- 浏览,确认提交里获取文件名、文件路径、上传图片
- NodeJs之TypeScript开发环境--VS Code
- docker的简单使用
- lua关于require和package.loaded常被忽略的故事
- Jupyter Notebook导出成pdf
- singleLine属性
- JavaScript文件获取与提交
- 文章标题fda
- iOS 动画篇----CAAnimation
- 简单的解决EOF多读取一行的问题
- Oracle SQL语句
- 选择排序算法(python实现)
- JNI:Java调用C函数打印hello,world
- 第2章 在HTML 中使用JavaScript
- Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts