Chrome JS操作文件的方法
一、File API

File API 提供了一种在 Web 应用中操作本地文件的标准方法,通过<input type="file"> 元素,用户可以选择本地文件,然后使用 JavaScript 对其进行操作。
1、文件选择器:
<input type="file" id="fileInput">
2、读取文件内容:
document.getElementById('fileInput').addEventListener('change', function(event) {
const file = event.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const content = e.target.result;
console.log(content);
};
reader.readAsText(file);
}
});二、FileReader对象
FileReader 是一个内置的 JavaScript 对象,可以异步读取 File 或 Blob 对象的内容,它支持多种读取方法,如 readAsText、readAsDataURL 和 readAsArrayBuffer 等。
1、读取文本文件:
const input = document.createElement('input');
input.type = 'file';
input.onchange = function(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = function(e) {
console.log(e.target.result);
};
reader.readAsText(file);
};
document.body.appendChild(input);2、读取图片文件:
const input = document.createElement('input');
input.type = 'file';
input.onchange = function(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = function(e) {
const img = document.createElement('img');
img.src = e.target.result;
document.body.appendChild(img);
};
reader.readAsDataURL(file);
};
document.body.appendChild(input);三、Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,可以在服务器端执行 JavaScript 代码,通过 Node.js 的 fs 模块,我们可以非常方便地操作本地文件系统。
1、读取文件:
const fs = require('fs');
fs.readFile('path/to/file.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});2、写入文件:
const fs = require('fs');
const content = 'Some content to write into the file';
fs.writeFile('path/to/file.txt', content, 'utf8', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File has been written');
});四、Electron
Electron 是一个用于构建跨平台桌面应用的框架,它基于 Node.js 和 Chromium,通过 Electron,我们可以使用 JavaScript 操作本地文件系统,并构建功能丰富的桌面应用。

1、创建一个基本的 Electron 应用:
const { app, BrowserWindow } = require('electron');
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
win.loadFile('index.html');
}
app.whenReady().then(createWindow);五、File System Access API(Chrome 86+)
Chrome 86 引入了 File System Access API,它允许安全地在浏览器中读写用户本地文件,核心功能主要是读取文件、写入或创建文件以及访问文件夹。
1、读取本地文件:
async function getFile() {
[fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
const text = await file.text();
console.log(text);
}2、保存本地文件:
async function saveFile() {
const writable = await fileHandle.createWritable();
await writable.write('测试一下');
await writable.close();
}六、Chrome扩展程序(Extension)开发
Chrome扩展程序使用HTML、JavaScript、CSS和图片等Web技术开发,用以增强Chrome浏览器功能,自动登录、定时刷新、抢票等功能。
1、manifest.json:
{
"manifest_version": 2,
"name": "iSmoking",
"version": "1.0.0",
"description": "iSmoking监控程序",
"icons": {
"16": "img/smoking.png",
"48": "img/smoking.png",
"128": "img/smoking.png"
},
"background": {
"scripts": ["js/jquery-3.5.1.min.js", "js/background.js"]
},
"browser_action": {
"default_icon": "img/smoking.png",
"default_title": "iSmoking监控程序",
"default_popup": "popup.html"
},
"content_scripts": [{
"matches": ["https://www.smokingpipes.com/*"],
"js": ["js/jquery-3.5.1.min.js", "js/content.js"],
"run_at": "document_end",
"all_frames": true
}],
"permissions": [
"contextMenus",
"tabs",
"notifications",
"webRequest",
"webRequestBlocking",
"storage",
"https://www.smokingpipes.com/*"
],
"options_ui": {
"page": "options.html",
"chrome_style": true
}
}七、归纳与注意事项
安全性:无论是哪种方法,都要注意安全性问题,特别是直接操作本地文件时,要确保用户授权并避免恶意操作。
兼容性:不同的方法适用于不同的环境和需求,File API适用于现代浏览器,而Node.js适用于服务器端,Electron适用于桌面应用开发。
错误处理:在进行文件操作时,务必添加错误处理机制,以应对可能出现的各种异常情况。
FAQs
Q1:如何在网页中实现文件上传功能?

A1:可以使用 HTML 的<input type="file"> 元素结合 JavaScript 的 File API 来实现文件上传功能,具体实现如下:
1、HTML部分:<input type="file" id="fileInput">
2、JavaScript部分:
document.getElementById('fileInput').addEventListener('change', function(event) {
const file = event.target.files[0];
if (file) {
const formData = new FormData();
formData.append('file', file);
fetch('/upload', { method: 'POST', body: formData })
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
}
}); 上述代码会在用户选择文件后,将文件作为 FormData 对象发送到服务器端的/upload 接口。
Q2:如何通过Electron读取本地文件?
A2:在Electron中读取本地文件可以通过 Node.js 的 fs 模块实现,以下是一个简单的示例:
1、主进程代码(main.js):
const { app, BrowserWindow } = require('electron');
let mainWindow;
function createWindow () {
mainWindow = new BrowserWindow({ width: 800, height: 600 });
mainWindow.loadFile('index.html');
}
app.whenReady().then(createWindow);2、渲染进程代码(renderer.js):
const fs = require('fs');
fs.readFile('path/to/file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});在这个示例中,主进程负责创建窗口,而渲染进程则使用 Node.js 的 fs 模块读取本地文件。
小伙伴们,上文介绍了“chrome js操作文件”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。