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

    <!-- 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进制文件等。。

HTML5之文件API的更多相关文章

  1. 第90天:HTML5中文件API和拖放操作

    一.文件API File API:提供客户端本地操作文件的可能 multiple是让文件域可以多选 <!DOCTYPE html> <html lang="en" ...

  2. 用html5文件api实现移动端图片上传&预览效果

    想要用h5在移动端实现图片上传&预览效果,首先要了解html5的文件api相关知识(所有api只列举本功能所需): 1.Blob对象  Blob表示原始二进制数据,Html5的file对象就继 ...

  3. HTML5权威指南--标签新变化,文件API,拖放API(简要学习笔记一)

    1.标签元素更加语义化   2.内容类型仍然为“text/html”    扩展符仍然为html或者htm.    <1>DOCTYPE 声明<!DOCTYPE html>就可 ...

  4. HTML5 文件API(一)

    1.FileList对象与File对象 2.文件API之Bolb对象 A Blob object represents a file-like object of immutable, raw dat ...

  5. HTML5实现文件断点续传

    HTML5的FILE api,有一个slice方法,可以将BLOB对象进行分割.前端通过FileList对象获取到相应的文件,按照指定的分割方式将大文件分段,然后一段一段地传给后端,后端再按顺序一段段 ...

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

    html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3 ...

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

    前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(P ...

  8. Html5大文件断点续传

    大文件分块   一般常用的web服务器都有对向服务器端提交数据有大小限制.超过一定大小文件服务器端将返回拒绝信息.当然,web服务器都提供了配置文件可能修改限制的大小.针对iis实现大文件的上传网上也 ...

  9. HTML5 <Audio/>标签Api整理(二)

    1.实例2: 相对较完整 Html代码: <style> #volumeSlider .slider-selection { background:#bababa; } </styl ...

随机推荐

  1. iptables过滤设置服务端口

    1.为SSH跟换连接端口 修改SSH配置文件:/etc/ssh/sshd_config #找到Port 22,这里是标识默认使用22端口,修改为想要的端口. Port Port 2.查看iptable ...

  2. 悲剧啊!Mysql的上古BUG!!!

    导读 这是MySQL8.0修复的上古bug之一,在2003年由Percona的CEO(当时应该还没Percona吧)提出的bug#199,光看这bug号就扑面而来一股上古时代的沧桑气息. 问题的本质在 ...

  3. tomcat 快速部署静态文件

    server.conf配置: <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software ...

  4. python class metaclass instance

    >>> class CObj(object):... pass...>>> dir()['CObj', '__builtins__', '__doc__', '__ ...

  5. WAMP错误提示:HTTP Error 404.The requested resource is not found

    原因: 本地80端口被占用,需要修改WAMP的默认端口 修改设置: 找到 bin/apache/apache***/conf/httpd.conf文件 将文件中的80修改为8088 (注:修改三个位置 ...

  6. jeecms3.0.4版本 详解请求如何找到首页(转)

    第一步:发送http://localhost:8080/emisstrade/ 请求 第二步:首先进入配置文件web.xml, <context-param> <param-name ...

  7. dubbox rest服务

    1.xml配置: web.xml 定义监听的contextpath,见rest协议定义 <servlet> <servlet-name>dispatcher</servl ...

  8. EF操作多数据库

    1.Account3_Register_DB_Model作为(空)模板库,根据此模板生成的其他数据除了数据库名称不一样,其他表,视图,字段等等都一致 2.Account3_Platform_Maste ...

  9. svn上传工程之后下载,打开下载之后的工程缺少文件

    当我们把iOS的工程上传到SVN中,当我们再从SVN中下载下来,就会出现错误,这是什么原因呢?我这里出现的错误是找不到文件,后来知道原来是被屏蔽掉了,就是上传的时候不上传某个类型的文件.例如我出错就是 ...

  10. 请慎用java的File#renameTo(File)方法

    转载地址:http://xiaoych.iteye.com/blog/149328 以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移 ...