资讯专栏INFORMATION COLUMN

HTML5文件操作-文件上传(上)

沈俭 / 2623人阅读

摘要:最后一次修改文件的时间。选择文件代码上传如图这时看文字显示如图此时我们在获得对象时,不能用这种方式获取文件对象了不然只获取的是对象集合里面的一个对象。

js要操作文件,首先得讲到的是文件api里常见的几个对象:

</>复制代码

  1. 1,Blob
  2. 2,File
  3. 3,FileList
  4. 4,FileReader

1.1 Blob对象表示的是二进制数据,提供了一个slice方法,该方法可以访问到字节内部的数据段(也就是整个数据的某一段数据)

1.2 File对象,File对象是从Blob对象继承过来的,表示的是一个具体的文件,有两个属性,name,文件的名字,不包括路径。lastModifiedDate,最后一次修改文件的时间。当然,从Bolb继承下来的,Blob有的,File也有。
代码:

</>复制代码

  1. window.onload = function() {
  2. var file = document.getElementById("file");
  3. var button = document.getElementById("button");
  4. var ofile = null;
  5. button.onclick = function() {
  6. //用户还没有点击“选择文件”把文件添加进input里(input里为空)
  7. //而直接点击了上传按钮,就让它退出
  8. if (file.files.length == 0) {
  9. console.log("请选择文件");
  10. return false;
  11. }
  12. //这里只选择了一个文件
  13. ofile = file.files[0];
  14. console.log(ofile);
  15. }
  16. }

如图:

通过File来找size,type,lastModifiedDate
代码:

</>复制代码

  1. console.log(ofile.size + "-" + ofile.type + "-" + ofile.lastModifiedDate);

如图:

1.3 FileList对象表示的是一个文件file对象的集合,当我们用h5的多文件上传时,首先得要在type="file"的input元素里添加multiple属性,multiple="multiple",可允许用户选择多个文件,具体操作按住Ctrl继续选择多个文件,选择好之后,点击完成,比如你选了3个文件,这时,FileList对象里就存有3个不同的file对象,每个不同的小File对象里面保存着该图片的信息。
选择3文件
代码:

</>复制代码

如图:

这时看文字显示:
如图:

此时,我们在获得file对象时,不能用files[i]这种方式获取文件对象了(files[i//0,1,2]),不然只获取的是对象集合里面的一个file对象。所以,我们要把files的[]去掉。ofile = file.files; 这样获取的就是一个文件列表,然后我们循环遍历每个对象看看其内容:
代码:

</>复制代码

  1. button.onclick = function() {
  2. //用户还没有点击“选择文件”把文件添加进input里(input里为空)
  3. //而直接点击了上传按钮,就让它退出
  4. if (file.files.length == 0) {
  5. console.log("请选择文件");
  6. return false;
  7. }
  8. //这里只选择了一个存有文件对象的文件列表,该列表具有长度length
  9. ofile = file.files;
  10. console.log(ofile.length);//3
  11. console.log("------------------------")
  12. //遍历每个file对象
  13. for (var i = 0; i < ofile.length; i++) {
  14. console.log(ofile[i]);
  15. }
  16. }

结果如图: 每个file对象的内容

1.4 FileReader 对象用来读取文件中的数据,异步的方式读取文件保存到内存中,并赋值给JavaScript的变量
FileReader里的四个读取文件的方法:

</>复制代码

  1. 1,readAsBinaryString();该方法把读取到的文件数据以二进制的形式保存到result属性里面,参数为一个Bolb对象。
  2. 2,readAsDataURL();该方法会把该图片读成一个url保存到result里,也就是说可以把这个图片的结果作为img的src属性使用,就能显示出该图片
  3. 3,readAsText();该方法是按某种编码来读取文件,第一个参数为Blob对象,第二个参数为编码方式,
  4. 4abort();中断文件读取。
  5. FileReader里的事件:
  6. 1,onloadstart 读取文件时开始触发;
  7. 2,onprogress 读取文件的过程中触发;
  8. 3,onload 读取成功时触发;
  9. 4,onabort 读取中断时触发
  10. 5,onerror 读取错误时触发
  11. 6,onloadend 读取完成后触发 (无论成功与否)

1.4.1 readAsBinaryString()
在使用这些方法之前,先要搞个对象出来,var reader = new FileReader();创建完对象之后,直接调用该对象上的方法:reader.readAsBinaryString(ofile);把要读取的文件对象放进去读取结果在result里面,reader.result;
看代码:

</>复制代码

  1. button.onclick = function() {
  2. //用户还没有点击“选择文件”把文件添加进input里(input里为空)
  3. //而直接点击了上传按钮,就让它退出
  4. if (file.files.length == 0) {
  5. console.log("请选择文件");
  6. return false;
  7. }
  8. //这里只选择了一个存有文件对象的文件列表,该列表具有长度length
  9. ofile = file.files[0];
  10. var reader = new FileReader();//创建一个读取文件对象reader
  11. reader.readAsBinaryString(ofile);
  12. reader.onload = function() {//文件读取成功后 打印出数据结果,
  13. console.log(reader.result);
  14. }
  15. }

看图片:

1.4.2 readAsDataURL()方法:

直接看代码:

</>复制代码

  1. button.onclick = function() {
  2. //用户还没有点击“选择文件”把文件添加进input里(input里为空)
  3. //而直接点击了上传按钮,就让它退出
  4. if (file.files.length == 0) {
  5. console.log("请选择文件");
  6. return false;
  7. }
  8. //这里只选择了一个存有文件对象的文件列表,该列表具有长度length
  9. ofile = file.files[0];
  10. var reader = new FileReader();//创建一个读取文件对象reader
  11. reader.readAsDataURL(ofile);
  12. reader.onload = function() {//文件读取成功后 打印出数据结果,
  13. document.body.innerHTML += ""
  14. }
  15. }

结果如图:

1.4.3 readAsText()方法的用法:

代码:

</>复制代码

  1. reader.readAsText(ofile, "UTF-8");//默认utf-8;
  2. reader.onload = function() {//文件读取成功后 打印出数据结果,
  3. console.log(reader.result);
  4. }

结果:

以上就是我对js文件API的学习及理解,笔者技术水平有限,期待对js文件API的更进一步了解,笔者将会坚持写HTML5文件操作-文件上传(中),拖拽上传,(下),上传文件至服务器。
待续。。。

列表项目

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/50736.html

相关文章

  • HTML5文件操作-文件

    摘要:最后一次修改文件的时间。选择文件代码上传如图这时看文字显示如图此时我们在获得对象时,不能用这种方式获取文件对象了不然只获取的是对象集合里面的一个对象。 js要操作文件,首先得讲到的是文件api里常见的几个对象: 1,Blob 2,File 3,FileList 4,FileReader 1.1 Blob对象表示的是二进制数据,提供了一个slice方法,该方法可以访问到字节内部的数据段...

    xorpay 评论0 收藏0
  • webuploader与网宿云踩坑

    摘要:上传结构与网宿云要求上传结构的不同上图是翻自网宿云的文档的分片上传流程。鉴于网宿云的上传一片一块在逻辑上没毛病,我们同样能一块一块完成上传这里注意请仔细看网宿云或七牛云分片上传的文档,了解如何分片上传。 webuploader踩坑 webuploader是百度fex团队开发的一个十分便捷的上传插件,但是我们在实际生产中,会发现使用它与我们的需求有各种各样的出入。最近做上传功能,踩了不少...

    Yi_Zhi_Yu 评论0 收藏0
  • HTML5 进阶系列:文件下载

    摘要:前言中提供的文件在前端中有着丰富的应用,上传下载读取内容等在日常的交互中很常见。构造函数中的第一个参数是一个数组,可以存放对象对象对象和字符串。通过构造函数创建一个对象该对象有以下方法中断读取操作。 前言 HTML5 中提供的文件API在前端中有着丰富的应用,上传、下载、读取内容等在日常的交互中很常见。而且在各个浏览器的兼容也比较好,包括移动端,除了 IE 只支持 IE10 以上的版本...

    learn_shifeng 评论0 收藏0

发表评论

0条评论

沈俭

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<