HTML5之文件API

问题很简单,做个上传文件的页面。

    <!-- multiple代表可上传多个文件 -->
    <input type="file" id="file" multiple/>
    <input type="button" id="btn" value="上传" />

html页面中简单两行代码就完成基本的文件上传页面。如下图。解决。

/***************************分割线********************/

此时又来了一个新问题:如何获取用户上传的这个文件的文件名、文件大小、文件类型?

var btn = document.getElementById("btn"),
    file = document.getElementById("file"),
    fileSize = document.getElementById("fileSize"),
    fileType = document.getElementById("fileType");

btn.onclick = function() {
    fileSize.innerHTML = file.files[0].size;  //files是一个数组,指的是第一个文件。
    fileType.innerHTML = file.files[0].type;  //获取文件名是file.files[0].type
};

效果如下图。解决

这个files就是一个文件集合的数组。他包含四个对象,分别是

  • name:该文件的文件名
  • size:文件的字节大小。注意是字节。[1kb==1024b(字节),1b == 8bit(比特),1Mb == 1024kb]
  • type:文件的类型。(text/html、image/png)
  • lastModifiedDate:字符串,文件上一次被修改的时间。(目前只有Chrome支持)

/***************************分割线***************************/

此时又来一个新问题,用户上传了一张图片,并想预览一下?

这里引入一个新类型FileReader。类似于XMLHttpRequest。

这个类型下有5个对象,分别是

readAsText(file,encoding):以纯文本形式(text)读取文件,将读取到的文本保存在 result 属性中。第二个参数用于指定编码类型,是可选的。

readAsDataURL(file):读取文件并将文件以数据 URI 的形式(图片)保存在 result 属性中。

readAsBinaryString(file):读取文件并将一个字符串保存在 result 属性中,字符串中每个字符表示一字节。

readAsArrayBuffer(file):读取文件并将一个包含文件内容的 ArrayBuffer 保存在result 属性中。

abort(): 中断读取文件

还有6个方法,分别是:

onabort 中断触发
onerror 错误触发
onprogress 读取中触发
onload 成功读取后触发
onloadend 无论失败或成功后触发

回归正题。

var btn = document.getElementById("btn"),
    file = document.getElementById("file"),
    fileSize = document.getElementById("fileSize"),
    fileType = document.getElementById("fileType"),
    show = document.getElementById("show");
btn.onclick = function() {
    // fileSize.innerHTML = file.files[0].size;
    // fileType.innerHTML = file.files[0].type;
    var reader = new FileReader();    //先new一个对象。
    reader.readAsDataURL(file.files[0]); //重要的一步,获取图片内容,图片的内容会保存在reader.result中
    reader.onload = function(){
        show.innerHTML = ‘<img src="‘+ reader.result + ‘" alt="这是图片"/>‘;//页面显示
    }
};

  

    <!-- multiple代表可上传多个文件 -->
    <input type="file" id="file" multiple/>
    <input type="button" id="btn" value="上传" />
    <br/>
    <!-- <span>文件大小:</span><span id="fileSize"></span><br/>
    <span>文件类型:</span><span id="fileType"></span><br/> -->
    <div id="show">
    </div>

真好看。

同理,还可以读取text文本,n进制文件等。。

时间: 2024-08-10 19:15:54

HTML5之文件API的相关文章

Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 补充: 终于可以读出肉的眼能看懂的人类文字了!!! 经在 safari 7.0.4(9537.76.4) 测试,即使关闭 WebGL 支持,Fil

HTML5 文件API(一)

1.FileList对象与File对象 2.文件API之Bolb对象 A Blob object represents a file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and e

[JS进阶] HTML5 之文件操作(file)

前言 在 HTML 文档中 <input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建. 该元素包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件. 该元素的 value 属性保存了用户指定的文件的名称,但是当包含一个 file-upload 元素的表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名. 当用户选择或编辑一个文件名,file-upload 元素触发 onc

用HTML5的File API做上传图片预览功能

用HTML5的File API做上传图片预览功能 前几天做了一个项目,涉及到上传本地图片的功能,正好之前了解过 html5 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习).移动端完全支持哦!已测试. 下面给大家看看代码吧怎么实现的 第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能) <input type="file" id="fileElem" mul

[html5+java]文件异步读取及上传核心代码

html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3.java端接受 核心代码: 1.拖拽代码段: 1 <div id="dropzone"> 2 <div>Drag & drop your file here...</div> 3 <div id='showFile'></di

Html5大文件断点续传

大文件分块 一般常用的web服务器都有对向服务器端提交数据有大小限制.超过一定大小文件服务器端将返回拒绝信息.当然,web服务器都提供了配置文件可能修改限制的大小.针对iis实现大文件的上传网上也有一些通过修改web服务器限制文件大小来实现.不过这样对web服务器的安全带了问题.攻击者很容易发一个大数据包,将你的web服务器直接给拖死. 现在针对大文件上传主流的实现方式,通过将大文件分块.比如针对一个100M文件,按2M拆分为50块.然后再将每块文件依次上传到服务器上,上传完成后再在服务器上合并

【小月博客】用HTML5的File API做上传图片预览功能

前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习).移动端完全支持哦!已测试. 下面给大家看看代码吧怎么实现的 第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能) <input type="file" id="fileElem" mul

HTML5 大文件上传示例

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML5大文件分片上传</title> <script src="js/spark-md5.min.js" type="text/javascript" charset="utf-8"></script> <

HTML5程序设计 Canvas API

检测浏览器支持情况 <script type="text/javascript"> try { document.createElement("Canvas").getContext("2d"); document.getElementById("support").innerHTML = "OK"; } catch (e) { document.getElementById("sup