强制让浏览器允许JS读写本地文件……的操作!
问题回复——5:
前端无法像原生APP一样直接操作本地文件,否则的话打开个网页就能把用户电脑上的文件偷光了,所以需要通过用户触发,用户可通过以下三种方式操作触发:
1、通过input type=”file” 选择本地文件
2、通过拖拽的方式把文件拖过来
3、在编辑框里面复制粘贴
参考网址:http://web.jobbole.com/93227/
—————————————————————————————————————————
人机交互方式的实现:
演示效果截图:
代码部分(interaction.html):
1
<script src="jquery.js"></script>
2
<input type="file" value="选择文件" id="upload" style="display:none;" οnclick="return fileUpload_onclick()" οnchange="return fileUpload_onselect()"/>
3
<input type="button" value="选择文件" id="import">
4
<script>
5
$("#import").click(function(){
6
$("#upload").click();//代码去触发点击
7
})
8
/**
9
* 点击[选择文件]按钮时触发的事件
10
*/
11
function fileUpload_onclick(){
12
alert("HAHA");
13
}
14
/**
15
* 选中文件后触发的事件
16
* 直接前台解析txt文件。使用的是FileReader对象
17
*/
18
function fileUpload_onselect(){
19
console.log("onselect");
20
var path = $("#upload").val();//文件路径
21
console.log(path);//C:fakepathtestfile.txt
22
var selectedFile = document.getElementById("upload").files[0];
23
console.log(selectedFile); //File(20) {name: "testfile.txt", lastModified: 1531300104720, lastModifiedDate: Wed Jul 11 2018 17:08:24 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 20, …}
24
console.log(selectedFile.src);// undefined
25
console.log(selectedFile.type);// text/plain
26
var name = selectedFile.name;//读取选中文件的文件名
27
var size = selectedFile.size;//读取选中文件的大小
28
console.log("wenjianming:"+name+"daxiao:"+size);//wenjianming:testfile.txtdaxiao:20
29
var reader = new FileReader();//这是核心!!读取操作都是由它完成的
30
reader.readAsText(selectedFile);
31
//readAsText(file,[encoding]):将文件读取为文本,encoding缺省为UTF-8 readAsText(selectedFile,'UTF-8')
32
reader.onload = function(oFREvent){//读取完毕从中取值
33
var pointsTxt = oFREvent.target.result;
34
alert(pointsTxt)
35
// your code。。。。
36
}
37
}
38
</script>
reader.readAsText(selectedFile);
reader.onload = function(oFREvent){//读取完毕从中取值 var pointsTxt = oFREvent.target.result; alert(pointsTxt) // your code。。。。 } }</script>
FileReader
对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File
或 Blob
对象指定要读取的文件或数据。
其中File对象可以是来自用户在一个<input>
元素上选择文件后返回的FileList
对象,也可以来自拖放操作生成的 DataTransfer
对象,还可以是来自在一个HTMLCanvasElement
上执行mozGetAsFile()
方法后返回结果。
1
//【h5文件操作API blob对象】
2
var debug = {hello: "world"};
3
var blob = new Blob([JSON.stringify(debug, null, 2)],
4
{type : 'application/json'});
5
6
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含DOMString的数组
7
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob
对FileReadwe理解的官网网址:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
可供参考的链接:https://blog.csdn.net/xwq1012/article/details/41942013
—————————————————————————————————————————
JavaScript中的ActiveXObject队形的实现:
演示效果截图:
代码部分(activeXObject.html):
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
3
<head>
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
<title>ActiveXObject</title>
6
</head>
7
<body>
8
<div id="aa"></div>
9
10
<script language="javascript" type="text/javascript">
11
var fso, ts, s ;
12
var ForReading = 1;
13
//创建FileSystemObject对象的代码
14
fso = new ActiveXObject("Scripting.FileSystemObject");
15
//[object] { } (Mozilla 11 Windows) 支持 (IE 支持)
16
// (Chrome 58 Windows) 不支持
17
//QQ浏览器也不支持,提示:(Uncaught ReferenceError: ActiveXObject is not defined at activeXObject.html:14)
18
console.log(fso);
19
//打开文件 (特别注意:路径中的转义)
20
ts = fso.OpenTextFile("C:\Users\14573\Desktop\file\AAA\testfile.txt", ForReading);
21
//读取文件一行内容到字符串
22
s = ts.ReadLine();
23
//显示字符串信息
24
document.getElementById("aa").innerHTML=s;
25
//关闭文件
26
ts.Close();
27
</script>
28
</body>
29
</html>
官网中有明确提示:
警告 |
---|
此对象为 Microsoft 扩展,仅在 Internet Explorer 中受支持,在 Windows 8.x 应用商店应用中不受支持。 |
说明 |
---|
Internet Explorer 9 标准模式、Internet Explorer 10 标准模式、Internet Explorer 11 标准模式和 Windows 应用商店应用或更高版本不支持在远程服务器上创建 ActiveXObject。 |
参考链接:https://blog.csdn.net/pl1612127/article/details/77862174
可供参考的链接:https://zhidao.baidu.com/question/2052152980493488107.html
JavaScript中的ActiveXObject对象)
—————————————————————————————————————————
浏览器的兼容性,针对不同的浏览器创建不同的对象的实现:
演示效果截图:
运行后谷歌浏览器不能正常显示,出现以下错误(解决:https://www.cnblogs.com/micua/p/chrome-file-protocol-support-ajax.html):
XMLHttpRequest cannot load file:///E:2014/DEMO/html_ajax/header.html. Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource. |
以上错误提示是由于AJAX方法涉及到 跨域 的问题导致!
由于该网友没有在服务器环境里运行含有ajax方法的页面,而是直接通过浏览器打开(类似file:///的访问形式,即file协议)
本地页面ajax()请求本地页面,须通过服务器环境运行,类似这样:
http://127.0.0.1:8888/EXP99.COM/html_ajax/index.html
在某些浏览器中是允许这种操作的,比如Firefox浏览器,也就是说Filefox支持file协议下的AJAX请求。
代码部分(activeXobject_interaction.html):
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
3
<head>
4
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
5
</head>
6
<body>
7
<div id="title"></div>
8
<div id="myDiv"><h2>Let AJAX change this text</h2></div>
9
<button type="button" οnclick="loadXMLDoc()">Change Content</button>
10
</body>
11
<script>
12
function loadXMLDoc()
13
{
14
var xmlhttp;
15
if (window.XMLHttpRequest)
16
{// code for IE7+, Firefox, Chrome, Opera, Safari
17
xmlhttp=new XMLHttpRequest();
18
}
19
else
20
{// code for IE6, IE5
21
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
22
}
23
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) //readyState = 4 status = 0 { document.getElementById(“myDiv”).innerHTML=xmlhttp.responseText; //document.getElementById(“myDiv”).innerHTML=”TEST”; } } console.log(xmlhttp);xmlhttp.open(“POST”,”c:\testfile.txt”,true);xmlhttp.send();}</script></html>
网页中可以使用相对URL的能力通常意味着我们能使用本地文件系统来开发和测试HTML,并避免对Web服务器进行不必要的部署。
然而当使用XMLHttpRequest进行Ajax编程时,这通常是不行的。
XMLHttpRequest用于同HTTP和HTTPS协议一起工作。理论上,它能够同FTP这样的其他协议一起工作,但比如请求方法和响应状态码等部分API是HTTP特有的。如果从本地文件中加载网页,那么该网页中的脚本将无法通过相对URL使用XMLHttpRequest,因为这些URL将相对于file://URL而不是http://URL。而同源策略通常会阻止使用绝对http://URL。结果是当使用XMLHttpRequest时,为了测试它们通常必须把文件上传到Wb服务器或者运行一个本地服务器。
参考链接:https://blog.csdn.net/HU_YEWEN/article/details/80709410
虽然名字含有XML
,但该对象可以接受任何数据类型而不仅仅为XML,而且它支持的协议类型不限于HTTP(包括file,ftp)
XMLHttpRequest
是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest
在 AJAX 中被大量使用。
因此解决了浏览器,创建文件队象的差异性,IE使用ActiveOBject,非IE使用XMLHttpRequest,但是此时非IE文件队象在操作对象时候即便是支持file协议,但是onreadystatechenge方法中的一些请求方法与相应状态码是HTTP特有的。并且XMLHttpRequest它为客户端提供了在客户端和服务器之间传输数据的功能。
XMLHttpRequest 对象
所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject),(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。
XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
对XMLHttpRequest理解的官网网址https://msdn.microsoft.com/zh-cn/library/7sw4ddf8(v=vs.94).aspx
浏览器兼容性的解决参考网址:https://blog.csdn.net/chuck_kui/article/details/54943053
参考链接:https://blog.csdn.net/HU_YEWEN/article/details/80709410
https://blog.csdn.net/weiyanghuadi/article/details/8991800
http://blog.sina.com.cn/s/blog_4678e7630100xyof.html
—————————————————————————————————————————
综上所述:
(WEB操作本地文件:
1、h5 文件操作API:需要人机交互;
2、让ActiveXObject( “Microsoft.XmlDom “),对象在IE浏览器下显示数(IE5 ie6支持);
3、XMLHttpRequest
,它为客户端提供了在客户端和服务器之间传输数据的功能。https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest
“我们不再需要下载并且安装软件。一个简单的web浏览器和一个可供使用的互联网就足以让我们在任何时间,任何地点,还有任何平台上使用任何web应用程序。”
简 单来说,web应用很酷,但是相对于桌面应用来说,它们有比较显著的弱点:它们无法在一个有层次的文件夹结构体即文件系统中互动和组织。 幸运的是,如果我们使用Filesystem API,我们可以做到。这个API帮助我们控制私有的本地文件系统“沙箱(sandbox)”,在这里我们可以读和写文件,创建和排列文件夹。目前不只有Google的Chrome完整的支持Filesystem API,我觉得我们还是有必要学习这个强大并且方便的本地存储特性。
在之前我们操作本地文件都是使用flash、silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台、或者跨浏览器、跨设备等情况下实现统一的表现,从另外一个角度来说就是让我们的web应用依赖了第三方的插件,而不是很独立。 在HTML5标准中,默认提供了操作文件的API让这一切直接标准化。有了操作文件的API,让我们的Web应用可以很轻松的通过JS来控制文件的读取、写入、文件夹、文件等一系列的操作。
*****https://blog.csdn.net/arvin0/article/details/51159424?locationNum=14&fps=1
http://www.w3school.com.cn/tiy/t.asp?f=xdom_httprequest_j
https://blog.csdn.net/bilichen006/article/details/70994449
https://blog.csdn.net/yangaiyu/article/details/73303161
—————————————————————————————————————————
js读取本地json文件
js代码://获取api的ip部分 varmJson=$.ajax({url:"api.json",async:false}); vartemp=JSON…
博文
来自: 清风白月的博客
JS创建、写入、读取本地文件(txt)
经测试,该方法在火狐、360浏览器不支持,在IE浏览器中支持。创建本地文件写入文件读取文件小案例创建本地文件varfso;try{fso=newActiveXObject(&quot;Scri…
博文
来自: zhengyikuangge的博客
javascript 读取本地txt文件
使用fileAPI可以实现本地文件读取,可以实现将本地文件内容直接post,而不是文件本身参考文档https://www.html5rocks.com/zh/tutorials/file/dndfil…
博文
来自: ISaiSai的专栏
前台JS(type=‘file’)读取本地文件的内容,兼容各种浏览器 一
前台JS读取本地文件内容,兼容IE7、8、9、10FFChrome等各种版本,纠结了好长时间,终于找到方法,希望能帮到你,代码如下。直接复制保存为html运行看效果。functionupload(in…
博文
来自: 新手记录工作中成长点滴-
JavaScript读取本地文件
利用XMLHttpRequest对本地文件进行读取操作,值得注意的是,HTML文档的格式要与流中的读取格式设置一致,代码如下:functionload(name){letxhr=newXMLHttpR…
博文
来自: Bruce_wjh的博客
Html读取本地文件夹下文件
目的 在Html上选择本地文件夹,自动读取文件夹及子文件夹下的所有文件(本例以图片为例)并显示。技术分析 存在问题 Html中file标签获取到的路径时相对的。 Html中I…
博文
来自: 祥龙九霄的专栏
怎么利用js读取txt文件
js读取txt文件:123456789function readFile(filename){var fso = new ActiveXObject(“Scripting.FileSystemObje…
博文
来自: dukai392的博客
JS:对txt文件进行读写,替换和添加
亲测必须将代码放在记事本中,改成html格式,在用IE运行(必须)&lt;!DOCTYPEhtml&gt;&lt;html&gt;&lt;head&g…
博文
来自: 燕双嘤(ssq)
js读取本地文件
js读取本地文件js读取本地文件介绍在h5以前,js是没有办法读取文件的实现步骤:获取file,可以从中获取varfile=document.querySelector(‘.file’).files[…
博文
来自: lert707的博客
前台JS(type=‘file’)读取本地文件的内容,兼容各种浏览器 二
前台js读取本地文件内容方法:1、IE用newActiveXObject(“Scripting.FileSystemObject”)2、其他用FileReader对象html5的方法说法不严谨,具体自…
博文
来自: 新手记录工作中成长点滴-
js读取本地文件和写入本地文件
读取本地文件:&lt;!doctypehtml&gt;&lt;htmllang="en"&gt;&lt;head&gt;&l…
博文
来自: 孤独的墙根
HTML5 FileReader 读取txt文件
JS读取本地txt最近有从本地读取txt文件的需要,奈何网上搜索js读取本地txt,都是新建一个fso对象,即(FileSystemObject)。…
博文
来自: j_bleach的博客
JS-读取txt文件内容
&lt;!DOCTYPEhtml&gt;&lt;html&gt;&lt;head&gt;&lt;metacharset="UTF-8&…
博文
来自: wang704987562的博客
Javascript本地写入txt和读取txt文件示例
1.写入 FileSystemObject可以将文件翻译成文件流。 第一步: 例: 复制代码代码如下:Varfso=newActiveXObject(Scripting.FileSystemObjec…
博文
来自: lxf0613050210的博客
读取本地txt文件内容
C++读取本地txt文件内容#include&lt;iostream&gt;#include&lt;fstream&gt;/**fopen函数是在当前目录下打开一个文件…
博文
来自: HamaZhu的博客
js下Ajax读取txt文件内容
在这个例子中,HTML页与txt文件位于同一目录下。代码如下:&lt;!DOCTYPEhtml&gt;&lt;htmlxmlns="http://www.w3.org…
博文
来自: L-Joy的博客
前端打开文件读取文件内容
遇到了前端打开文件,读取文件信息的功能: filesToUpload:Array=[]; getContent(){ this.readFile(this.filesToUpload).th…
博文
来自: u012631731的博客
JS读取本地文件及目录的方法
Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读、写和删除,就象在VB、VC等高…
博文
来自: 零度的博客专栏
前端H5技术实现解析文件内容(txt为例)
背景在做项目的时候经常遇到上传文件解析内容的功能,平常常用的做法是上传文件到服务端,然后解析完毕后输出前端。但更常见的只是解析内容而已,无须上传文件到服务端,更没有必要将数据前后端流转加重服务端压力。…
博文
来自: sRhee的博客
基于jq和纯js的 读取本地.txt文件的方法
好像ajax本来就可以读到.txt<!DOCTYPEHTML><html><head><metahttp-equiv=”Content-Type”con…
博文
来自: 352328759的博客
Chrome浏览器加载本地文件
1、Chrome浏览器加载本地文件一般来说,为了安全起见,浏览器是不能通过load方法来加载本地文件的,load方法只能加载远程服务器上的文件。在浏览器默认的情况下,试图加载一个本地文件,会出现交叉域…
博文
来自: sdta25196的博客
前端本地利用Node起服务,读取文件
本地起服务,读取文件&quot;usestrict&quot;;//加载所需要的模块varhttp=require(‘http’);varurl=require(‘url’);varf…
博文
来自: yulin009的博客
前端使用js读取文件
最近同事问我js能不能读取本地文件;想起以前看到js读取本地文件的文章,然后自己写了个demo。ps:这有点像Java的IO流,但是又有差别。 首先我们定义一个input标签type="fi…
博文
来自: u012794845的专栏
前台JS(type=‘file’)读取本地文件的内容,兼容各种浏览器
【自己测了下,能兼容各种浏览器,但是读取中文会出现乱码。自己的解决方法是用notepad++把txt文件编码改为utf-8(应该是和浏览器编码保持一致吧?。。)】原文 http://blog.csd…
博文
来自: weixin_33805557的博客
JS打开本地文件
直接上代码,解释太累了varinputObj=document.createElement(‘input’)inputObj.setAttribute(‘id’,’_ef’);inputObj.set…
博文
来自: ytouch
Html5 js FileReader接口(读取本地txt的内容)
&lt;!DOCTYPEhtml&gt;&lt;htmllang="en"&gt;&lt;head&gt;&lt;metac…
博文
来自: 徐同保的专栏
js操作本地txt文件,获取数据(中文)
1.ActiveXObject兼容性差,IE支持,不管它2.使用文本输入框获取(FileReader)html:<inputtype=”file”id=”file”/>js:varfile…
博文
来自: dandan_222的博客
使用javascript读写本地文件的方法
近期在全身心做毕业设计,我需要做的项目类似于迷宫搜索,为了显示算法运行时的效果,采用了javascript来写(使用canvas来画图)。其中一个功能是把js代码随机生成的迷宫保存到本地文件中,方便下…
博文
来自: huaweidong2011的专栏
没有更多推荐了,返回首页
分类专栏
归档
最新文章
热门文章
阅读数 34578
阅读数 22523
读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)……阅读数 14922
阅读数 12411
Socket编程(C语言实现)——基于TCP协议,基于UDP协议(多线程,循环监听)(网络间通信AF_INET,典型的TCP/IP四型模型的通信过程)阅读数 10049
最新评论
- C语言 —— 获取字符串中两个字符…
…
weixin_44751425:666 - C 预处理器 —— __DATE_…
- 结构体的嵌套 自身嵌套 相互嵌套
…
weixin_42167759:对的 是错误的!使用了无类型的结构体 - 函数 —— scanf() …
…
AlexBrown0:sscanf(” Aaturday March “, “%*[ ]%[ ]”, str,str1);
这段代码有问题哦 第一个%*[]只取过滤作用,%[]对应str,str则缺少对应的%s 应改为
sscanf(” Aaturday March “, “%*[ ]%s%s%*[ ]”, str,str1); - MD5算法 —— C语言实现(字符…
…
lo106258:[reply]qq_35819319[/reply]
应该是以字符串的结束