全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript操作文件_动力节点Java学院整理

在HTML表单中,可以上传文件的唯一控件就是<input type="file">。

注意:当一个表单包含<input type="file">时,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

出于安全考虑,浏览器只允许用户点击<input type="file">来选择本地文件,用JavaScript对<input type="file">的value赋值是没有任何效果的。当用户选择了上传某个文件后,JavaScript也无法获得该文件的真实路径:

通常,上传的文件都由后台服务器处理,JavaScript可以在提交表单时对文件扩展名做检查,以便防止用户上传无效格式的文件:

var f = document.getElementById('test-file-upload');
var filename = f.value; // 'C:\fakepath\test.png'
if (!filename || !(filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif'))) {
  alert('Can only upload image file.');
  return false;
}

File API

由于JavaScript对用户上传的文件操作非常有限,尤其是无法读取文件内容,使得很多需要操作文件的网页不得不用Flash这样的第三方插件来实现。

随着HTML5的普及,新增的File API允许JavaScript读取文件内容,获得更多的文件信息。

HTML5的File API提供了File和FileReader两个主要对象,可以获得文件信息并读取文件。

下面的例子演示了如何读取用户选取的图片文件,并在一个<div>中预览图像:

var
  fileInput = document.getElementById('test-image-file'),
  info = document.getElementById('test-file-info'),
  preview = document.getElementById('test-image-preview');
// 监听change事件:
fileInput.addEventListener('change', function () {
  // 清除背景图片:
  preview.style.backgroundImage = '';
  // 检查文件是否选择:
  if (!fileInput.value) {
    info.innerHTML = '没有选择文件';
    return;
  }
  // 获取File引用:
  var file = fileInput.files[0];
  // 获取File信息:
  info.innerHTML = '文件: ' + file.name + '<br>' +
           '大小: ' + file.size + '<br>' +
           '修改: ' + file.lastModifiedDate;
  if (file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
    alert('不是有效的图片文件!');
    return;
  }
  // 读取文件:
  var reader = new FileReader();
  reader.onload = function(e) {
    var
      data = e.target.result; // 'data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...'      
    preview.style.backgroundImage = 'url(' + data + ')';
  };
  // 以DataURL的形式读取文件:
  reader.readAsDataURL(file);
});

上面的代码演示了如何通过HTML5的File API读取文件内容。以DataURL的形式读取到的文件是一个字符串,类似于data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...,常用于设置图像。如果需要服务器端处理,把字符串base64,后面的字符发送给服务器并用Base64解码就可以得到原始文件的二进制内容。

回调

上面的代码还演示了JavaScript的一个重要的特性就是单线程执行模式。在JavaScript中,浏览器的JavaScript执行引擎在执行JavaScript代码时,总是以单线程模式执行,也就是说,任何时候,JavaScript代码都不可能同时有多于1个线程在执行。
你可能会问,单线程模式执行的JavaScript,如何处理多任务?

在JavaScript中,执行多任务实际上都是异步调用,比如上面的代码:

reader.readAsDataURL(file);

就会发起一个异步操作来读取文件内容。因为是异步操作,所以我们在JavaScript代码中就不知道什么时候操作结束,因此需要先设置一个回调函数:

reader.onload = function(e) {
  // 当文件读取完成后,自动调用此函数:
};

当文件读取完成后,JavaScript引擎将自动调用我们设置的回调函数。执行回调函数时,文件已经读取完毕,所以我们可以在回调函数内部安全地获得文件内容。


# js  # 操作文件  # javascript 操作文件 实现方法小结  # 表单  # 回调  # 上传  # 单线程  # 都是  # 是一个  # 就会  # 完成后  # 都不  # 尤其是  # 什么时候  # 没有任何  # 并在  # 我们可以  # 一个重要  # 并以  # 第三方  # 来实现  # 类似于  # 可以获得 


相关文章: 如何用IIS7快速搭建并优化网站站点?  如何用搬瓦工VPS快速搭建个人网站?  如何注册花生壳免费域名并搭建个人网站?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  建站主机选购指南与交易推荐:核心配置解析  如何在云主机上快速搭建网站?  建站之星后台管理:高效配置与模板优化提升用户体验  已有域名能否直接搭建网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  高端网站建设与定制开发一站式解决方案 中企动力  零基础网站服务器架设实战:轻量应用与域名解析配置指南  免费ppt制作网站,有没有值得推荐的免费PPT网站?  代购小票制作网站有哪些,购物小票的简要说明?  个人网站制作流程图片大全,个人网站如何注销?  如何用狗爹虚拟主机快速搭建网站?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  深圳网站制作的公司有哪些,dido官方网站?  中山网站推广排名,中山信息港登录入口?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何通过VPS建站无需域名直接访问?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧    制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  教学网站制作软件,学习*后期制作的网站有哪些?  如何在阿里云虚拟服务器快速搭建网站?  如何通过网站建站时间优化SEO与用户体验?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何用AWS免费套餐快速搭建高效网站?  韩国服务器如何优化跨境访问实现高效连接?  如何在宝塔面板中创建新站点?  长沙做网站要多少钱,长沙国安网络怎么样?  全景视频制作网站有哪些,全景图怎么做成网页?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  公司门户网站制作流程,华为官网怎么做?  婚礼视频制作网站,学习*后期制作的网站有哪些?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  网站制作公司排行榜,抖音怎样做个人官方网站  建站之星安装后界面空白如何解决?  如何快速重置建站主机并恢复默认配置?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  家具网站制作软件,家具厂怎么跑业务?  如何通过FTP服务器快速搭建网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  宝塔新建站点为何无法访问?如何排查?  如何快速生成ASP一键建站模板并优化安全性?  香港服务器选型指南:免备案配置与高效建站方案解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。