zoukankan      html  css  js  c++  java
  • 操作文件 -------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="button" /> //这里的type类型改成Submit才能触发表单提交 <script src="../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="100px;height:200px" />
            </div>
            <div id="info">
    
            </div>
            <script src="../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=reader.result; 这样也可以获取到
    var data = 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解码就可以得到原始文件的二进制内容

  • 相关阅读:
    设计模式-14-桥接模式
    设计模式-13-中介者模式
    设计模式-12-命令模式
    设计模式-11-外观模式
    设计模式-10-装饰器
    设计模式-9-模板
    设计模式-8-适配器模式-组合
    设计模式-8-适配器模式-继承
    设计模式-7-策略模式+工厂模式
    设计模式-7-策略模式
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/7131955.html
Copyright © 2011-2022 走看看