以HTML5的文件上传API

如下demo代码在.html文件打开即可:

  1. !DOCTYPE html>
  2. <html lang="zh_cn">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>HTML5文件上传FileReader API</title>
  6. </head>
  7. <body>
  8. <!--一个能上传多媒体文件的表单-->
  9. <input type="file" id="upload-file" multiple />
  10. <!--显示图片的地方-->
  11. <div id="destination"></div>
  12. <script>
  13. document.getElementById('upload-file').addEventListener('change', function() {
  14. var file;
  15. var destination = document.getElementById('destination');
  16. destination.innerHTML = '';//每次清空内容
  17.  
  18. // 循环用户多选的文件
  19. for(var x = 0, xlen = this.files.length; x < xlen; x++) {
  20. file = this.files[x];
  21. console.log(file);
  22. if(file.type.indexOf('image') != -1) { // 非常简单的交验,判断文件是否是图片
  23. var reader = new FileReader();//文件预览对象
  24. reader.readAsDataURL(file);//设置要预览的文件
  25. reader.onload = function(e) {//监听文件加载完成事件
  26. var img = new Image();//创键预览图片
  27. img.src = e.target.result; //把预览图片的src设置为e.target.result属性。返回预览文件的二进制内存数据
  28. destination.appendChild(img);//在把每张图片,放到预览区域
  29. };
  30. }
  31. }
  32. });
  33. </script>
  34. </body>
  35. </html>

一、input:file属性

属性值有以下几个比较常用:

accept:表示可以选择的文件MIME类型,多个MIME类型用英文逗号分开,常用的MIME类型见下表。

multiple:是否可以选择多个文件,多个文件时其value值为第一个文件的虚拟路径。

1、accept

只能选择png和gif图片

  1. <input id="fileId1" type="file" accept="image/png,image/gif" name="file" />

2、multiple

多选文件上传

  1. <input id="fileId2" type="file" multiple="multiple" name="file" />

3、常用MIME类型

  1. 后缀名 MIME名称
  2. *.3gpp audio/3gpp, video/3gpp
  3. *.ac3 audio/ac3
  4. *.asf allpication/vnd.ms-asf
  5. *.au audio/basic
  6. *.css text/css
  7. *.csv text/csv
  8. *.doc application/msword
  9. *.dot application/msword
  10. *.dtd application/xml-dtd
  11. *.dwg image/vnd.dwg
  12. *.dxf image/vnd.dxf
  13. *.gif image/gif
  14. *.htm text/html
  15. *.html text/html
  16. *.jp2 image/jp2
  17. *.jpe image/jpeg
  18. *.jpeg image/jpeg
  19. *.jpg image/jpeg
  20. *.js text/javascript, application/javascript
  21. *.json application/json
  22. *.mp2 audio/mpeg, video/mpeg
  23. *.mp3 audio/mpeg
  24. *.mp4 audio/mp4, video/mp4
  25. *.mpeg video/mpeg
  26. *.mpg video/mpeg
  27. *.mpp application/vnd.ms-project
  28. *.ogg application/ogg, audio/ogg
  29. *.pdf application/pdf
  30. *.png image/png
  31. *.pot application/vnd.ms-powerpoint
  32. *.pps application/vnd.ms-powerpoint
  33. *.ppt application/vnd.ms-powerpoint
  34. *.rtf application/rtf, text/rtf
  35. *.svf image/vnd.svf
  36. *.tif image/tiff
  37. *.tiff image/tiff
  38. *.txt text/plain
  39. *.wdb application/vnd.ms-works
  40. *.wps application/vnd.ms-works
  41. *.xhtml application/xhtml+xml
  42. *.xlc application/vnd.ms-excel
  43. *.xlm application/vnd.ms-excel
  44. *.xls application/vnd.ms-excel
  45. *.xlt application/vnd.ms-excel
  46. *.xlw application/vnd.ms-excel
  47. *.xml text/xml, application/xml
  48. *.zip aplication/zip
  49. *.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

二、样式美化

请看博客:css input[type=file] 样式美化,input上传按钮美化 http://www.haorooms.com/post/css_input_uploadmh

三、AJAX上传文件

在说到ajax上传文件。ajax上传的时候,需要获得input:file选择的文件(可能为多个文件),获取其文件列表为:

  1. // input标签的files属性
  2. document.querySelector("#fileId").files
  3. // 返回的是一个文件列表数组

获得的文件列表,然后遍历插入到表单数据当中。即:

  1. // 获得上传文件DOM对象
  2. var oFiles = document.querySelector("#fileId");
  3. // 实例化一个表单数据对象
  4. var formData = new FormData();
  5. // 遍历图片文件列表,插入到表单数据中
  6. for (var i = 0, file; file = oFiles[i]; i++) {
  7. // 文件名称,文件对象
  8. formData.append(file.name, file);
  9. }

获得表单数据之后,就可以用ajax的POST上传。

  1. // 实例化一个AJAX对象
  2. var xhr = new XMLHttpRequest();
  3. xhr.onload = function() {
  4. alert("上传成功!");
  5. }
  6. xhr.open("POST", "upload.php", true);
  7. // 发送表单数据
  8. xhr.send(formData);

上传到服务器之后,获取到文件列表为:

  1. Array
  2. (
  3. [jpg_jpg] => Array
  4. (
  5. [name] => jpg.jpg
  6. [type] => image/jpeg
  7. [tmp_name] => D:\xampp\tmp\phpA595.tmp
  8. [error] => 0
  9. [size] => 133363
  10. )
  11. [png_png] => Array
  12. (
  13. [name] => png.png
  14. [type] => image/png
  15. [tmp_name] => D:\xampp\tmp\phpA5A6.tmp
  16. [error] => 0
  17. [size] => 1214628
  18. )
  19. )

在服务端循环遍历这个数组就可以上传文件了。

以防备忘,部分:http://www.haorooms.com/post/input_file_leixing


                                      H5文件上传                                       


HTML5的 input:file上传 以及 类型控制的更多相关文章

  1. 在HTML5的 input:file 上传文件类型控制 遇到的问题

    1.input:file 属性的介绍  先瞅代码吧 <form> <input type="file" name="pic" accept=& ...

  2. input file 上传文件类型控制

    文件类型 accept *.3gpp audio/3gpp, video/3gpp.ac3 audio/ac3.asf allpication/vnd.ms-asf.au audio/basic.cs ...

  3. HTML5的 input:file上传类型控制(转载)

    http://www.haorooms.com/post/input_file_leixing HTML5的 input:file上传类型控制 2014年8月29日 66352次浏览 一.input: ...

  4. HTML5的 input:file上传类型控制

    一.input:file属性 属性值有以下几个比较常用: accept:表示可以选择的文件MIME类型,多个MIME类型用英文逗号分开,常用的MIME类型见下表. multiple:是否可以选择多个文 ...

  5. 有关图片上传的相关知识input type=file,HTML5的 input:file上传类型控制

    遇到项目,要求做一个影像系统,对于前端开发需要了解file的相关属性,以及如何开发.工欲善其事,必先利器嘛.度娘一阵子搜索,找资料.这年头,需要的是你解决问题的能力啊! 参考应用:https://ww ...

  6. input:file上传文件类型(记录)

    imput 属性有以下几种: 1.type:input类型这就不多说了2.accept:表示可以选择的文件类型,多个类型用英文逗号分开,常用的类型见下表. <input id="fil ...

  7. HTML5: input:file上传类型控制

    ylbtech-HTML5: input:file上传类型控制   1. 一.input:file 属性返回顶部 一.input:file属性 属性值有以下几个比较常用: accept:表示可以选择的 ...

  8. ajax+ashx 完美实现input file上传文件

    1.input file 样式不能满足需求 <input type="file" value="浏览" /> IE8效果图:    Firefox效 ...

  9. 如何用一张图片代替 'input:file' 上传本地文件??

    今天去面试,碰到了一道题,也许是因为紧张或者喝水喝多了,一时竟然没有转过弯来,回来之后一细想原来这么简单,哭笑不得,特此记录一下! 原题是这样的:  如何用一张图片代替 'input:file' 上传 ...

随机推荐

  1. 周刷题第一期总结(two sum and two numbers)

    由于深深的知道自己是事件驱动型的人,一直想补强自己的薄弱环节算法,却完全不知道从哪里入手.所以只能采用最笨的办法,刷题.从刷题中遇到问题就解决问题,最后可能多多少少也能提高一下自己的渣算法吧. 暂时的 ...

  2. maven手动添加jar包到本地仓库

    推荐几个好的 Maven 常用仓库网址:http://mvnrepository.com/http://search.maven.org/ Maven 安装 JAR 包的命令是: mvn instal ...

  3. python之匿名函数lambda

    # lambda:匿名函数 # 语法:lambda 参数: 表达式 answer = lambda x: x * 5 print("answer(5): ", answer(5)) ...

  4. Bootstrap输入框组

    前面的话 有时,我们需要将文本输入框(input group)和文件或者小icon组合在一起进行显示, 我们称之为addon.也就是通过在文本输入框 <input> 前面.后面或是两边加上 ...

  5. Nginx HTTP 过滤addition模块(响应前后追加数据)

    --with-http_addition_module 需要编译进Nginx 其功能主要在响应前或响应后追加内容 add_before_body 指令 将处理给定子请求后返回的文本添加到响应正文之前 ...

  6. python---面对对象的三大特征

    一.三大特征 面对对象的三大特征:继承.多态和封装,继承在面向对象类的创建中非常常见. 1.继承 为什么会有继承,当我们要创建一个新类的时候,发现他有很多属性或者反法都和我们另一个类的方法相同,这时我 ...

  7. BZOJ2141排队——树状数组套权值线段树(带修改的主席树)

    题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...

  8. BZOJ3626 LNOI2014LCA(树链剖分+主席树)

    开店简化版. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  9. 【 Gym - 101138D 】Strange Queries (莫队算法)

    BUPT2017 wintertraining(15) #4B Gym - 101138D 题意 a数组大小为n.(1 ≤ n ≤ 50 000) (1 ≤ q ≤ 50 000)(1 ≤ ai ≤  ...

  10. [luogu1912][bzoj4196][NOI2015]软件管理器

    题解 树剖模板题,每次改变是\(1\)或者是\(0\),区间求和和区间修改就可了. ac代码 # include <cstdio> # include <cstring> # ...