html5学习4:HTML5之input:file说明

来源:互联网 发布:网络水军有多少 编辑:程序博客网 时间:2024/04/29 22:30

http://qianduanblog.com/post/html5-learning-4-html5-input-file.html

、input:file属性

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

  • accept:表示可以选择的文件MIME类型,多个MIME类型用英文逗号分开,常用的MIME类型见下表。
  • multiple:是否可以选择多个文件,多个文件时其value值为第一个文件的虚拟路径。

1、accept

  1. 只能选择pnggif图片
  2. <input id="fileId1" type="file" accept="image/png,image/gif" name="file" />

2、multiple

  1. 多文件上传
  2. <input id="fileId2" type="file" multiple="multiple" name="file" />

3、常用MIME类型

MIME名称MIME说明image/pngPNG图片image/gifGIF图片image/jpeg,image/pjpeg(PHP)jpeg图片,即jpg格式图片text/plain纯文本,如txt文本等text/htmlHTML文件application/pdfPDF文件multipart/form-data表单数据,常用于表单或AJAX的文件上传application/x-www-form-urlencoded表单数据,常用于表单或AJAX的POST提交application/x-javascript,text/javascriptjavascript脚本文件text/cssCSS样式表文件audio/x-wavwav声音文件audio/mpegMP3声音文件video/vnd.rn-realvideoRMVB视频文件application/zipzip压缩文件

二、样式美化

input:file比较特殊,无法使用具体的样式来规范它,在不同的浏览器上都有不同的样式。前期写过关于美化input:file的文章,详见:CSS学习之3:html input[type=file] css样式美化 - 前端博客。这里说明的样式美化和这篇文章类似:

首先要在input外包一层标签,通常为a标签(a标签的href属性不建议为#),然后设置.file为相对定位和行类块属性,设置input:file的文字大小和绝对定位,即:

  1. <a href="javascript:;" class="file">选择文件
  2. <input type="file" name="" id="">
  3. </a>

选择文件

样式为:

  1. .file {
  2. position: relative;
  3. display: inline-block;
  4. background: #D0EEFF;
  5. border: 1px solid #99D3F5;
  6. border-radius: 4px;
  7. padding: 4px 12px;
  8. overflow: hidden;
  9. color: #1E88C7;
  10. text-decoration: none;
  11. text-indent: 0;
  12. line-height: 20px;
  13. }
  14. .file input {
  15. position: absolute;
  16. font-size: 100px;
  17. right: 0;
  18. top: 0;
  19. opacity: 0;
  20. }
  21. .file:hover {
  22. background: #AADFFD;
  23. border-color: #78C3F3;
  24. color: #004974;
  25. text-decoration: none;
  26. }

三、AJAX上传文件

在说到ajax上传文件,之前的文章也有说过(详见:JS学习32:html5拖拽图片批量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. )

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


0 0
原创粉丝点击