日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)……

發(fā)布時間:2025/10/17 HTML 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)…… 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

強(qiáng)制讓瀏覽器允許JS讀寫本地文件……的操作!

問題描述: 讓自己的瀏覽器允許js讀寫本地文件,盡可能多的兼容各種瀏覽器。(即本機(jī)的js文件讀寫本機(jī)的文件) 問題回復(fù)——1: 您的意思是不需要瀏覽器與用戶交互直接操作用戶機(jī)上的文件?
不符合瀏覽器的安全標(biāo)準(zhǔn),屬于瀏覽器的設(shè)計(jì)缺陷 所以瀏覽器是不可能這樣支持的 --
就是沒有發(fā)布的頁面,要執(zhí)行js操作本機(jī)的文件? 這是可以的,但也是需要通過人機(jī)交互來提醒用戶的。 問題回復(fù)——2: js 可以對windows系統(tǒng)下的文件進(jìn)行操作,如果是這樣的話建議您做成hta因?yàn)樗氖褂脵?quán)限比普通的html高可以更輕松的調(diào)用系統(tǒng)clsid或者activex 但是您說的html+js對所有平臺(包括手機(jī))這一點(diǎn)是出入的。 因?yàn)閣indows提供了文件對象模型,我們可以通過js 來調(diào)用activex組件來操作本機(jī)文件但是到了linux下幾乎是不可能的,linux的系統(tǒng)安全性特高,查個文件屬性有時候還要root權(quán)限別說要執(zhí)行文件操作。 而且現(xiàn)在流行的android系統(tǒng)也是linux內(nèi)核的。
參考鏈接:https://zhidao.baidu.com/question/524554520.html?qbl=relate_question_0&word=%B7%C7IE%E4%AF%C0%C0%C6%F7%20%B6%C1%CE%C4%BC%FE 問題回復(fù)——3: web程序不要妄想對客戶機(jī)的文件進(jìn)行讀寫。ActiveXObject是IE特有的。這種東西本身就是不安全的,現(xiàn)在不允許,今后更不會允許。假設(shè)我做一網(wǎng)站,你來訪問,訪問了之后我直接在你的磁盤上寫上1億個垃圾txt文件,你咋想?所以不要考慮這個了。讀寫文件是針對服務(wù)器的。 具體如下: 電腦常見問題解決 1、無法自動識別硬盤控制器 使用非正版的個別操作系統(tǒng)光盤,在安裝系統(tǒng)時,容易出現(xiàn)此錯誤。原因是非正版光盤自動加載的硬盤控制器驅(qū)動不符合電腦自身需要的驅(qū)動。這種情況就建議換正版光盤安裝操作系統(tǒng)。 2、手動更新錯誤的驅(qū)動程序 windows操作系統(tǒng)正常使用,但手動更新驅(qū)動程序把硬盤控制器的驅(qū)動程序更新錯誤,導(dǎo)致此故障。解決方法是進(jìn)入windows系統(tǒng)高級菜單,選擇最后一次的正常配置,即可正常進(jìn)入系統(tǒng)。 3、bios設(shè)置變化后所導(dǎo)致 windows操作系統(tǒng)正常,但是由于某些原因,用戶修改了bios設(shè)置,導(dǎo)致0x0000007b故障。 問題回復(fù)——4: 你可以使用TideSDK開發(fā)本地客戶端,開發(fā)時可以使用JavaScript語言。另外,如果是Web應(yīng)用,如果需要數(shù)據(jù)存儲,可以使用離線存儲技術(shù)或者瀏覽器端數(shù)據(jù)庫。Chrome下面要實(shí)現(xiàn)這樣的功能必須使用瀏覽器擴(kuò)展(Extension)+瀏覽器插件(Plugin)。目前有為Chrome提供本地文件讀寫支持的開源項(xiàng)目:https://github.com/airyland/npapi-file-io 參考網(wǎng)址:https://zhidao.baidu.com/question/398969190.html?qbl=relate_question_1&word=%B7%C7IE%E4%AF%C0%C0%C6%F7%20%B6%C1%CE%C4%BC%FE

問題回復(fù)——5:
前端無法像原生APP一樣直接操作本地文件,否則的話打開個網(wǎng)頁就能把用戶電腦上的文件偷光了,所以需要通過用戶觸發(fā),用戶可通過以下三種方式操作觸發(fā):
1、通過input type=”file” 選擇本地文件
2、通過拖拽的方式把文件拖過來
3、在編輯框里面復(fù)制粘貼
參考網(wǎng)址:http://web.jobbole.com/93227/

綜上所述: 【1】針對回復(fù)——1,并結(jié)合回復(fù)——5:可以get到WEB端可以解析txt文件但是需要人機(jī)交互; 【2】針對回復(fù)——2、3:對2中我們get到因?yàn)閣indows提供了文件對象模型,可以用js來調(diào)用activex組件來實(shí)現(xiàn)。 ????????????????????????????? 結(jié)合回復(fù)——3,get到JavaScript中的ActiveXObject對象是IE特有的,其他的瀏覽器不支持該對象; 【3】針對回復(fù)——3:我們會想到瀏覽器的兼容性問題,不同的瀏覽器創(chuàng)建不同的文件對象模型。 【4】針對回復(fù)——4:get到Chrome下面要實(shí)現(xiàn)這樣的功能必須使用瀏覽器擴(kuò)展+插件。

---------------------------------------------------------------------------------------------------------------------------

人機(jī)交互方式的實(shí)現(xiàn):

演示效果截圖:




代碼部分(interaction.html)

<script src="jquery.js"></script> <input type="file" value="選擇文件" id="upload" style="display:none;" οnclick="return fileUpload_onclick()" οnchange="return fileUpload_onselect()"/> <input type="button" value="選擇文件" id="import"> <script>$("#import").click(function(){$("#upload").click();//代碼去觸發(fā)點(diǎn)擊})/*** 點(diǎn)擊[選擇文件]按鈕時觸發(fā)的事件*/function fileUpload_onclick(){alert("HAHA");}/*** 選中文件后觸發(fā)的事件* 直接前臺解析txt文件。使用的是FileReader對象*/function fileUpload_onselect(){console.log("onselect");var path = $("#upload").val();//文件路徑console.log(path); //C:\fakepath\testfile.txt var selectedFile = document.getElementById("upload").files[0];console.log(selectedFile); //File(20) {name: "testfile.txt", lastModified: 1531300104720, lastModifiedDate: Wed Jul 11 2018 17:08:24 GMT+0800 (中國標(biāo)準(zhǔn)時間), webkitRelativePath: "", size: 20,?…}console.log(selectedFile.src);// undefinedconsole.log(selectedFile.type);// text/plainvar name = selectedFile.name;//讀取選中文件的文件名var size = selectedFile.size;//讀取選中文件的大小console.log("wenjianming:"+name+"daxiao:"+size);//wenjianming:testfile.txtdaxiao:20var reader = new FileReader();//這是核心!!讀取操作都是由它完成的reader.readAsText(selectedFile); //readAsText(file,[encoding]):將文件讀取為文本,encoding缺省為UTF-8 readAsText(selectedFile,'UTF-8')reader.onload = function(oFREvent){//讀取完畢從中取值var pointsTxt = oFREvent.target.result;alert(pointsTxt)// your code。。。。}} </script>

? ? ?reader.readAsText(selectedFile);

reader.onload = function(oFREvent){//讀取完畢從中取值 var pointsTxt = oFREvent.target.result; alert(pointsTxt) // your code。。。。 } }</script>

FileReader?對象允許Web應(yīng)用程序異步讀取存儲在用戶計(jì)算機(jī)上的文件(或原始數(shù)據(jù)緩沖區(qū))的內(nèi)容,使用?File?或?Blob?對象指定要讀取的文件或數(shù)據(jù)。

其中File對象可以是來自用戶在一個<input>元素上選擇文件后返回的FileList對象,也可以來自拖放操作生成的?DataTransfer對象,還可以是來自在一個HTMLCanvasElement上執(zhí)行mozGetAsFile()方法后返回結(jié)果。

//【h5文件操作API blob對象】 var debug = {hello: "world"}; var blob = new Blob([JSON.stringify(debug, null, 2)],{type : 'application/json'});var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一個包含DOMString的數(shù)組 var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob

對FileReadwe理解的官網(wǎng)網(wǎng)址:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
可供參考的鏈接:https://blog.csdn.net/xwq1012/article/details/41942013

---------------------------------------------------------------------------------------------------------------------------

JavaScript中的ActiveXObject隊(duì)形的實(shí)現(xiàn):

演示效果截圖:




代碼部分(activeXObject.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ActiveXObject</title> </head> <body> <div id="aa"></div><script language="javascript" type="text/javascript"> var fso, ts, s ; var ForReading = 1; //創(chuàng)建FileSystemObject對象的代碼 fso = new ActiveXObject("Scripting.FileSystemObject"); //[object] { } (Mozilla 11 Windows) 支持 (IE 支持)// (Chrome 58 Windows) 不支持 //QQ瀏覽器也不支持,提示:(Uncaught ReferenceError: ActiveXObject is not defined at activeXObject.html:14) console.log(fso); //打開文件 (特別注意:路徑中的轉(zhuǎn)義) ts = fso.OpenTextFile("C:\\Users\\14573\\Desktop\\file\\AAA\\testfile.txt", ForReading); //讀取文件一行內(nèi)容到字符串 s = ts.ReadLine(); //顯示字符串信息 document.getElementById("aa").innerHTML=s; //關(guān)閉文件 ts.Close(); </script> </body> </html>

官網(wǎng)中有明確提示:

警告

此對象為 Microsoft 擴(kuò)展,僅在 Internet Explorer 中受支持,在 Windows 8.x 應(yīng)用商店應(yīng)用中不受支持。

說明

Internet Explorer 9 標(biāo)準(zhǔn)模式、Internet Explorer 10 標(biāo)準(zhǔn)模式、Internet Explorer 11 標(biāo)準(zhǔn)模式和 Windows 應(yīng)用商店應(yīng)用或更高版本不支持在遠(yuǎn)程服務(wù)器上創(chuàng)建?ActiveXObject

對ActiveXObject理解的官網(wǎng)網(wǎng)址https://msdn.microsoft.com/zh-cn/library/7sw4ddf8(v=vs.94).aspx

參考鏈接:https://blog.csdn.net/pl1612127/article/details/77862174
可供參考的鏈接:https://zhidao.baidu.com/question/2052152980493488107.html

JavaScript中的ActiveXObject對象

---------------------------------------------------------------------------------------------------------------------------

瀏覽器的兼容性,針對不同的瀏覽器創(chuàng)建不同的對象的實(shí)現(xiàn):

演示效果截圖:


運(yùn)行后谷歌瀏覽器不能正常顯示,出現(xiàn)以下錯誤(解決: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方法涉及到?跨域 的問題導(dǎo)致!

由于該網(wǎng)友沒有在服務(wù)器環(huán)境里運(yùn)行含有ajax方法的頁面,而是直接通過瀏覽器打開(類似file:///的訪問形式,即file協(xié)議)

本地頁面ajax()請求本地頁面,須通過服務(wù)器環(huán)境運(yùn)行,類似這樣:

http://127.0.0.1:8888/EXP99.COM/html_ajax/index.html

在某些瀏覽器中是允許這種操作的,比如Firefox瀏覽器,也就是說Filefox支持file協(xié)議下的AJAX請求。

代碼部分(activeXobject_interaction.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body><div id="title"></div> <div id="myDiv"><h2>Let AJAX change this text</h2></div> <button type="button" οnclick="loadXMLDoc()">Change Content</button> </body> <script> function loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();} else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} //當(dāng)使用async=true時,請規(guī)定在響應(yīng)處于onreadysrtatechenge事件中的就緒狀態(tài)時執(zhí)行函數(shù) 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>

網(wǎng)頁中可以使用相對URL的能力通常意味著我們能使用本地文件系統(tǒng)來開發(fā)和測試HTML,并避免對Web服務(wù)器進(jìn)行不必要的部署。

然而當(dāng)使用XMLHttpRequest進(jìn)行Ajax編程時,這通常是不行的。

XMLHttpRequest用于同HTTP和HTTPS協(xié)議一起工作。理論上,它能夠同F(xiàn)TP這樣的其他協(xié)議一起工作,但比如請求方法和響應(yīng)狀態(tài)碼等部分API是HTTP特有的。如果從本地文件中加載網(wǎng)頁,那么該網(wǎng)頁中的腳本將無法通過相對URL使用XMLHttpRequest,因?yàn)檫@些URL將相對于file://URL而不是http://URL。而同源策略通常會阻止使用絕對http://URL。結(jié)果是當(dāng)使用XMLHttpRequest時,為了測試它們通常必須把文件上傳到Wb服務(wù)器或者運(yùn)行一個本地服務(wù)器。

參考鏈接:https://blog.csdn.net/HU_YEWEN/article/details/80709410

雖然名字含有XML?,但該對象可以接受任何數(shù)據(jù)類型而不僅僅為XML,而且它支持的協(xié)議類型不限于HTTP(包括file,ftp)

XMLHttpRequest?是一個 API,它為客戶端提供了在客戶端和服務(wù)器之間傳輸數(shù)據(jù)的功能。它提供了一個通過 URL 來獲取數(shù)據(jù)的簡單方式,并且不會使整個頁面刷新。這使得網(wǎng)頁只更新一部分頁面而不會打擾到用戶。XMLHttpRequest?在?AJAX?中被大量使用。

因此解決了瀏覽器,創(chuàng)建文件隊(duì)象的差異性,IE使用ActiveOBject,非IE使用XMLHttpRequest,但是此時非IE文件隊(duì)象在操作對象時候即便是支持file協(xié)議,但是onreadystatechenge方法中的一些請求方法與相應(yīng)狀態(tài)碼是HTTP特有的。并且XMLHttpRequest它為客戶端提供了在客戶端和服務(wù)器之間傳輸數(shù)據(jù)的功能

XMLHttpRequest 對象

所有現(xiàn)代瀏覽器均支持 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject),(IE7+、Firefox、Chrome、Safari 以及 Opera)均內(nèi)建 XMLHttpRequest 對象
XMLHttpRequest 用于在后臺與服務(wù)器交換數(shù)據(jù)。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。

對XMLHttpRequest理解的官網(wǎng)網(wǎng)址https://msdn.microsoft.com/zh-cn/library/7sw4ddf8(v=vs.94).aspx
瀏覽器兼容性的解決參考網(wǎng)址: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:需要人機(jī)交互;

? ? ? ? 2、讓ActiveXObject( "Microsoft.XmlDom "),對象在IE瀏覽器下顯示數(shù)(IE5 ie6支持);

? ? ? ?3、XMLHttpRequest它為客戶端提供了在客戶端和服務(wù)器之間傳輸數(shù)據(jù)的功能https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

??????4、ajax實(shí)現(xiàn):主要與服務(wù)器交互。

“我們不再需要下載并且安裝軟件。一個簡單的web瀏覽器和一個可供使用的互聯(lián)網(wǎng)就足以讓我們在任何時間,任何地點(diǎn),還有任何平臺上使用任何web應(yīng)用程序。”

簡 單來說,web應(yīng)用很酷,但是相對于桌面應(yīng)用來說,它們有比較顯著的弱點(diǎn):它們無法在一個有層次的文件夾結(jié)構(gòu)體即文件系統(tǒng)中互動和組織。 幸運(yùn)的是,如果我們使用Filesystem API,我們可以做到。這個API幫助我們控制私有的本地文件系統(tǒng)“沙箱(sandbox)",在這里我們可以讀和寫文件,創(chuàng)建和排列文件夾。目前不只有Google的Chrome完整的支持Filesystem API,我覺得我們還是有必要學(xué)習(xí)這個強(qiáng)大并且方便的本地存儲特性。

在之前我們操作本地文件都是使用flash、silverlight或者第三方的activeX插件等技術(shù),由于使用了這些技術(shù)后就很難進(jìn)行跨平臺、或者跨瀏覽器、跨設(shè)備等情況下實(shí)現(xiàn)統(tǒng)一的表現(xiàn),從另外一個角度來說就是讓我們的web應(yīng)用依賴了第三方的插件,而不是很獨(dú)立。 在HTML5標(biāo)準(zhǔn)中,默認(rèn)提供了操作文件的API讓這一切直接標(biāo)準(zhǔn)化。有了操作文件的API,讓我們的Web應(yīng)用可以很輕松的通過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

---------------------------------------------------------------------------------------------------------------------------

總結(jié)

以上是生活随笔為你收集整理的读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)……的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。