首页 > 代码库 > 操作文件 -------JavaScrip

操作文件 -------JavaScrip

本文摘要:http://www.liaoxuefeng.com/

在HTML表单中,可以上传文件的唯一控件就是<input type="file">

注意:当一个表单包含<input type="file">时,表单的enctype必须指定为multipart/form-datamethod必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。

出于安全考虑,浏览器只允许用户点击<input type="file">来选择本地文件,用JavaScript对<input type="file">value赋值是没有任何效果的。当用户选择了上传某个文件后,JavaScript也无法获得该文件的真实路径:

  //当设置了Enctype为multipart/form-data 可以传多格式的,不仅限于图片
<form id="form1" runat="server" enctype="multipart/form-data" method="post" action="表格提交的去向"> //要在后台得到数据,这里的action需要给个页面或一般处理程序 <input id="File1" type="file" name="File1" /> //如果需要在后台获取信息,这边的标签必须带name属性,后台的Form["XX"]才会有值 <input id="Button1" type="button" value=http://www.mamicode.com/"button" /> //这里的type类型改成Submit才能触发表单提交 <script src=http://www.mamicode.com/"../js/jquery-1.11.0.min.js"></script> <script> use strict; $("#Button1").click(function () { var filename = document.getElementById("File1").value; //这只是个路径,而且不是真实的
//对文件内类进行过滤
if (!filename || !(filename.endsWith(.jpg) || filename.endsWith(.png) || filename.endsWith(.gif))) { alert(Can only upload image file.); return false; } }) </script> </form>

   我们上传一般只能一个路径,需要文件信息,我们一般在后台去做。

技术分享

 

 

File API         可以在前台就直接获取文件信息,不用在去后台获取

由于JavaScript对用户上传的文件操作非常有限,尤其是无法读取文件内容,使得很多需要操作文件的网页不得不用Flash这样的第三方插件来实现。

随着HTML5的普及,新增的File API允许JavaScript读取文件内容,获得更多的文件信息。

HTML5的File API提供了FileFileReader两个主要对象,可以获得文件信息并读取文件。

关于 FIle和FileReader的了解 参考 https://developer.mozilla.org/en-US/docs/Web/API/File

  <input id="File1" type="file" /> 
        <div>
            <img  id="im" style="width:100px;height:200px" />
        </div>
        <div id="info">

        </div>
        <script src=http://www.mamicode.com/"../js/jquery-1.11.0.min.js"></script>
        <script>
            use strict;
            var fileInput = document.getElementById("File1");
            var im = document.getElementById("im");
            var info = document.getElementById("info");
            //监听change事件
            fileInput.addEventListener("change", function () {
                if (!fileInput.value) {  //非空非零即为真
                    info.innerHTML = "你没有选择文件";
                    return ;  //事件里面遇到return就退出了
                }
//以下代码看不懂先去了解File Api里面的File和FileReader对象
var file = fileInput.files[0];//单个上传,只有一个就是0 info.innerHTML = 文件: +file.name +<br>+ 大小:+file.size+<br>+ 修改: + file.lastModifiedDate; if (file.type !== image/jpeg && file.type !== image/png && file.type !== image/gif) { alert(不是有效的图片文件!); return; } var reader = new FileReader(); reader.onload = function (e) { //每次读取操作完成触发次事件
//var data=http://www.mamicode.com/reader.result; 这样也可以获取到>
var data = http://www.mamicode.com/e.target.result; //data:image/jpeg;base64,/9j/4AAQSk...(base64编码)... //console.log(data); 这个输出来看了一下好多,也看不懂,而且还把网页卡住了 im.src = data; }
//回调 reader.readAsDataURL(file); //用于读取File内容,读取完成后,会触发onload事件 })
</script>

结果:

技术分享

解释:

 

技术分享

readAsDataURL方法用于读取指定Blob或的内容File。读取操作完成后,readyState变成DONEloadend被触发。此时,该result属性包含  the data as a 表示文件数据的URL作为base64编码字符串。

上面的代码演示了如何通过HTML5的File API读取文件内容。以DataURL的形式读取到的文件是一个字符串,类似于data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...,常用于设置图像。如果需要服务器端处理,把字符串base64,后面的字符发送给服务器并用Base64解码就可以得到原始文件的二进制内容

 

 

操作文件 -------JavaScrip