如何读取Javascript中的本地文件(从电子应用程序运行)
我已经找了一个多小时了,我找不到我问题的答案。有没有一种方法可以只使用一个普通的旧文件URL从本地文件获取文本 我已经找到了许多通过文件输入HTML标签读取文件的方法,但我经历了难以置信的痛苦,找到了一个可以在我的PC上找到文件的代码示例,只使用简单的旧JS 代码将在电子应用程序中 我需要代码示例。大概是这样的:如何读取Javascript中的本地文件(从电子应用程序运行),javascript,file,methods,io,electron,Javascript,File,Methods,Io,Electron,我已经找了一个多小时了,我找不到我问题的答案。有没有一种方法可以只使用一个普通的旧文件URL从本地文件获取文本 我已经找到了许多通过文件输入HTML标签读取文件的方法,但我经历了难以置信的痛苦,找到了一个可以在我的PC上找到文件的代码示例,只使用简单的旧JS 代码将在电子应用程序中 我需要代码示例。大概是这样的: readFile("file:\\\\C:\path\to\file.txt","text/plain"); readFile(url,mim
readFile("file:\\\\C:\path\to\file.txt","text/plain");
readFile(url,mimetype){
....
}
如果我没有弄错的话,使用类似这样的东西应该可以与fs模块一起工作
fs.readFileSync("/path/to/file.txt");
如果你想在Electron中读取文件,你必须了解Electron应用程序的各个部分。简而言之,有一个主进程和一个渲染器进程。主进程拥有并被赋予使用节点模块的所有控制权,例如可以读取文件的模块。渲染器进程不应该有权访问
fs
模块,而是应该在需要使用fs
模块的任何时候,请求主进程使用fs
,然后返回结果
仅供参考,呈现程序是网页,电子应用程序的可见部分
这种通信称为IPC(进程间通信)。流程是:
fs
标题
//从主进程接收消息时调用
window.api.receive(“fromMain”,(数据)=>{
log(`Received${data}来自主进程`);
});
//向主进程发送消息
send(“toMain”,“一些数据”);
main.js
const{
应用程序,
浏览器窗口,
伊普曼
}=要求(“电子”);
常量路径=要求(“路径”);
常数fs=要求(“fs”);
//保留窗口对象的全局引用,如果不保留,则窗口将
//当JavaScript对象被垃圾收集时,将自动关闭。
让我们赢;
异步函数createWindow(){
//创建浏览器窗口。
win=新浏览器窗口({
宽度:800,
身高:600,
网络首选项:{
nodeIntegration:false,//是Electron v5之后的默认值
contextIsolation:true,//防止原型污染
enableRemoteModule:false,//关闭远程
preload:path.join(\uu dirname,“preload.js”)//使用预加载脚本
}
});
//加载应用程序
加载文件(path.join(uu dirname,“dist/index.html”);
//代码的其余部分。。
}
应用程序打开(“就绪”,创建窗口);
ipcMain.on(“toMain”,(事件,参数)=>{
fs.readFile(“path/to/file”,(错误,数据)=>{
//对文件内容做些什么
//将结果发送回渲染器进程
win.webContents.send(“fromMain”,responseObj);
});
});
preload.js
const{
contextBridge,
IPC渲染器
}=要求(“电子”);
//公开允许渲染器进程使用的受保护方法
//在不公开整个对象的情况下使用IPC渲染器
contextBridge.exposeInMainWorld(
“api”{
发送:(频道、数据)=>{
//白名单频道
设validChannel=[“toMain”];
if(有效通道包括(通道)){
发送(通道、数据);
}
},
接收:(频道,函数)=>{
设validChannel=[“fromMain”];
if(有效通道包括(通道)){
//故意剥离事件,因为它包含“发件人”
on(channel,(event,…args)=>func(…args));
}
}
}
);
免责声明:我是一本畅销书的作者,写了一篇关于如何使用fs
在电子应用程序中读取文件的文章。我希望你能读一读,因为里面有更多的信息
const fs=require(“fs”);
函数readFile(fileURL,mimeType){
//readfile不接受文件:\\\thing,因此我们将其删除
const pathToFile=fileURL.replace(“文件:\\\\”,“”);
fs.readFile(路径文件,mimeType,(错误,内容)=>{
如果(错误){
控制台日志(err);
返回;
}
控制台日志(内容);
})
}
readFile('C:\\Users\\\\Documents\\test.txt','utf8')
//如果在windows上运行,则需要对路径使用双反斜杠
//这里有一个例子regex可以做到这一点
pathToFile=pathToFile.replace(/\\/,“\\\\\”)
当我在web浏览器中尝试时,它似乎起作用了。。。我不熟悉FS,导入FS需要做些什么吗?是的,它是一个节点包“文件系统”,这是它的文档。
const fs = require("fs");
function readFile(fileURL,mimeType){
//readfile does not accept the file:\\\ thing, so we remove it
const pathToFile = fileURL.replace("file:\\\\",'');
fs.readFile(pathToFile,mimeType,(err,contents)=>{
if(err){
console.log(err);
return;
}
console.log(contents);
})
}
readFile('C:\\Users\\<userAccount>\\Documents\\test.txt','utf8')
//If your on windows you'll need to use double backslashes for the paths
//here's an example regex to do that
pathToFile = pathToFile.replace(/\\/,'\\\\')