插件思维:考察对input-file属性的应用,accept/multiple,和js对输入框的监听事件onchange/oninput的使用!
HTML代码:
<input type="file" name="file" id="files" accept="image/*" multiple="multiple" onchange="fileSelected();"/>
<div id="box"></div>
<div id="imgbox"></div>
代码解读: input上传文件的类型是type="file",accept限定input只能上传的文件类型,比如MP3/jpg等,multiple是否允许上传多个。
知识拓展:input标签的accept属性
以下为全部类型
*.3gpp audio/3gpp, video/3gpp 3GPP音频/视频
*.au audio/basic AU音频
*.css text/css 层叠样式表
*.doc application/msword Word文档
*.dwg image/vnd.dwg AutoCAD绘图数据库
*.dxf image/vnd.dxf AutoCAD绘图交换格式
*.gif image/gif 图形交换格式
*.htm text/html 超文本标记语言
*.html text/html 超文本标记语言
*.jp2 image/jp2 JPEG-2000
*.jpe image/jpeg JPEG
*.jpeg image/jpeg JPEG
*.jpg image/jpeg JPEG
*.js text/javascript, application/javascript JavaScript
*.json application/json JavaScript对象表示法
*.mp3 audio/mpeg MPEG音频/视频流,第三层
*.mp4 audio/mp4, video/mp4 MPEG-4音频/视频
*.ogg application/ogg, audio/ogg Ogg Vorbis
*.pdf application/pdf 便携式文档格式
*.png image/png 便携式网络图形
*.ppt application/vnd.ms-powerpoint PowerPoint演示文稿
*.svf image/vnd.svf 简单的矢量格式
*.tif image/tiff 标记的图像格式文件
*.tiff image/tiff 标记的图像格式文件
*.txt text/plain 纯文本
*.wps application/vnd.ms-works 工程文本文档
*.xhtml application/xhtml+xml 可扩展的超文本标记语言
*.xls application/vnd.ms-excel Excel电子表格
*.xml text/xml, application/xml 可扩展标记语言
*.zip aplication/zip 压缩的档案
常用案例方法:
仅允许多格式上传图片
<input type="file" accept="image/*" />
类型/* 表示允许类型的所有格式,等同于所有
accept="image/gif,image/jpeg,image/x-png,image/jpg,image/tiff..."
仅允许上传zip
<input type="file" accept="application/zip">
仅允许上传MP4视频
<input type="file" accept="audio/mp4, video/mp4">
js代码部分:
function fileSelected(){
var files = document.getElementById("files").files;
var box = document.getElementById("box");
if(files.length>10) {
alert("上传不能超过9个")
return false;
};
for(var i = 0 ;i<files.length;i++){
var filesize = Math.round(files[i].size / 1024);
var html = "<p><span>文件类型:"+files[i].type+"</span><span>文件大小:"+filesize+"kb</span></p>";
box.innerHTML = html;
var resultimg = document.getElementById('imgbox');
var img = document.getElementById('files').files[i];
var reader = new FileReader(); //创建filereader对象
reader.readAsDataURL(img);
reader.onload = function(ofile){
resultimg.innerHTML += '<img src="'+ofile.target.result+'"+alt="">'
}
}
}
代码解读:
1.*input.files —— 获取输入框上传的文件,数组格式
2.*input.files.length —— 获取输入框上传文件的数量
3.*input.files[i].size —— 获取第i个文件的大小
4.通过构造函数 new FileReader() 读取上传的文件
完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
#imgbox {width: 100%;height: 600px;overflow: hidden;}
#imgbox img{width: 198px;height: 198px;border: 1px solid #ddd}
</style>
<body>
<input type="file" name="file" id="files" accept="image/*" multiple="multiple" onchange="fileSelected();"/>
<div id="box">
</div>
<div id="imgbox">
</div>
<script type="text/javascript">
function fileSelected(){
var files = document.getElementById("files").files;
var box = document.getElementById("box");
if(files.length>10) {
alert("上传不能超过9个")
return false;
};
for(var i = 0 ;i<files.length;i++){
var filesize = Math.round(files[i].size / 1024);
var html = "<p><span>文件类型:"+files[i].type+"</span><span>文件大小:"+filesize+"kb</span></p>";
box.innerHTML = html;
var resultimg = document.getElementById('imgbox');
var img = document.getElementById('files').files[i];
var reader = new FileReader(); //创建filereader对象
reader.readAsDataURL(img);
reader.onload = function(ofile){
resultimg.innerHTML += '<img src="'+ofile.target.result+'"+alt="">'
}
}
}
</script>
</body>
</html>