本文摘要: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="width: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
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解码就可以得到原始文件的二进制内容。

操作文件 -------JavaScrip的更多相关文章

  1. 虚拟机出现“操作文件.PhysicalDrive1失败”的解决方法

    今天打算利用U盘给虚拟机装系统做实验,中途遇到了"操作文件.PhysicalDrive1失败"的错误,试了网上的方法都没有成功,最后自己试了很久总算弄出来了.鉴于本人的基础水平有限 ...

  2. 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化

    IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...

  3. python基础知识---操作文件

    一.打开文件  open()函数 open函数返回一个文件对象. 用法:open('文件名','模式') 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内 ...

  4. 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )

    对于文件夹,文档的操作一直处于一知半解状态,有时间闲下来了,好好练习了一把,对文档,文件的操作有了一个基本的认知, 若要深入了解,还是得通过实际的项目才行了,好了废话不多说,上酸菜!! 注:红色标题为 ...

  5. C#操作文件夹及文件的方法的使用

    本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内容 ...

  6. python读写操作文件

    with open(xxx,'r,coding='utf-8') as f:   #打开文件赋值给F ,并且执行完了之后不需要 f.close(). 在Python 2.7 及以后,with又支持同时 ...

  7. javaScript中利用ActiveXObject来创建FileSystemObject操作文件

    注:如果用javascript读本地文件,遇到安全问题. 需在浏览器中进行设置,如下:     工具—> Internet选项->安全->自定义级别->启用“没有标识为安全的A ...

  8. Python操作文件、文件夹、字符串

    Python 字符串操作 去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sSt ...

  9. golang操作文件的四种方法

    golang追加内容到文件末尾 字数349 阅读54 评论0 喜欢2 golang读写文件,网上很多教程了但是今天有个需求,想要把内容追加写到文件末尾google了好久,没有查到研究了一会儿file库 ...

随机推荐

  1. 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组

    题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...

  2. java程序生成二维码

    在物联网的时代,二维码是个很重要的东西了,现在无论什么东西都要搞个二维码标志,唯恐落伍,就差人没有用二维码识别了.也许有一天生分证或者户口本都会用二维码识别了.今天心血来潮,看见别人都为自己的博客添加 ...

  3. 牛客练习赛41D(思维转化)

    AC通道 要点 思路:题解中将所求进行转化\[max\{相似度\} = max\{M-不相似度\} = M-min\{不相似度\}\]因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取 ...

  4. Codeforces Round #129 (Div. 2) C

    Description The Little Elephant very much loves sums on intervals. This time he has a pair of intege ...

  5. Word中图片自动编号且与文中引用的编号对应

    当我们在进行大篇幅 word 文档的编写时, 为了节约修改文章中图片所花费的大量时间, 可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定在欲加编号的下方, ...

  6. Silverlight 密码框 Focus

    在做一个例子是需要运行起来后焦点默认设置在密码框上,在网上查了资料 自己找到一种方法,此方法在oob模式下管用 public Login() { InitializeComponent(); txtL ...

  7. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回

    回到目录 对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接 ...

  8. 【Java】Java与数字证书

    Java与数字证书 Java与数字证书 证书的签发和应用 证书的内容和意义 其它 证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥) ...

  9. Pod管理的iOS项目修改工程名

    声明:本文大部分内容来自于以下网址,其余的部分是自己尝试的总结和补充. http://www.jianshu.com/p/5f088acecf64 完整修改iOS工程名1 http://www.cnb ...

  10. swift 2特性记录

    swift 团队一直在优化,让大家准备在秋天的时候,迁移到swift2做准备. 一.错误处理 异常处理,不是NSError对象和双指针. 可以使用 throws   来指定方法来抛出一个错误. 调用d ...