JavaScript无法直接读写本地文件系统,需通过File API和FormData实现用户触发的文件上传与预览:用获取File对象,URL.createObjectURL()预览图片,FileReader读取文本,FormData配合fetch上传至服务端。
JavaScript 本身不能直接读写本地文件系统(出于安全限制),但可以通过浏览器提供的 File API 和 
FormData 等接口,实现用户主动选择文件后的上传与预览功能。核心在于“用户触发 + 浏览器沙箱内操作”,不涉及服务端逻辑,但需前后端配合完成真正上传。
使用 让用户选择文件,通过 change 事件拿到 FileList 对象:
示例:
@@##@@
对图片类文件,可用 URL.createObjectURL() 创建临时内存 URL,快速显示在 中:
URL.revokeObjectURL() 释放内存(尤其多图场景)补充代码:
if (file && file.type.startsWith('image/')) {
const url = URL.createObjectURL(file);
preview.src = url;
// 清理:在下次选择或页面卸载时释放
preview.onload = () => URL.revokeObjectURL(url);
}
文本类(如 .txt、.json、.csv)可读取内容并展示在 或 中;PDF 可嵌入 或用 PDF.js 渲染:
FileReader.readAsText() 读取文本内容(注意编码,默认 UTF-8)FileReader.readAsDataURL() 获取 base64 字符串(适合小文件,如图标、简历)文本预览示例:
const reader = new FileReader();
reader.onload = (e) => {
document.getElementById('textPreview').textContent = e.target.result;
};
reader.readAsText(file, 'UTF-8');
用 FormData 包装文件,配合 fetch 或 XMLHttpRequest 发送:
FormData.append('file', file) 即可添加单个文件;支持多个同名字段模拟多文件upload.onprogress 获取上传进度(XMLHttpRequest 更易控制)fetch 上传片段:
const formData = new FormData();
formData.append('file', file);
fetch('/api/upload', {
method: 'POST',
body: formData,
})
.then(res => res.json())
.then(data => console.log('上传成功:', data))
.catch(err => console.error('上传失败:', err));
# javascript
# java
# js
# json
# 编码
# 浏览器
# app
# 字节
# 后端
# csv
# pdf
# 简历
# 状态码
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
c++如何利用doxygen生成开发文档_c++ 代码注释规范与HTML文档导出【案例】
如何在Golang中操作嵌套切片指针_Golang多维slice修改
如何在网页无标准表格标签时高效提取结构化数据
Win11怎么连接投影仪_Win11多显示器投屏设置指南【步骤】
c++ std::future和std::promise c++线程间通信【教程】
Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】
Win11麦克风没声音怎么设置_Win11麦克风权限及驱动修复【教程】
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
Windows10如何更改任务栏高度_Win10解除锁定调整大小
Win11怎么检查TPM2.0模块_Windows11受信任平台模块开启状态查询
Drupal 中 HTML 链接被重复转义导致渲染异常的解决方案
php命令行怎么运行_通过CLI模式执行PHP脚本的步骤【说明】
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】
C++如何使用std::transform批量处理容器元素?(代码示例)
c# 如何深拷贝和浅拷贝
Win11怎么开启剪贴板历史记录_Windows11 Win+V键使用技巧
如何使用 Python 合并文件夹内多个 Excel 文件并避免权限错误
c++怎么调用nana库开发GUI_c++ 现代风格窗口组件与事件处理【实战】
Windows10系统怎么查看CPU温度_Win10性能监视器查看硬件数据
如何在 ACF 中正确更新嵌套多层的 Group 字段子字段
Win11声音忽大忽小怎么办 Win11音频增强功能关闭教程【修复】
如何在 Laravel 中通过嵌套关联关系进行 orderBy 排序
PHP主流架构怎么部署到Docker_容器化流程【操作】
如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法
Python与MongoDB NoSQL开发实战_文档模型与索引优化
PHP中require语句后直接调用返回对象方法的语法解析
如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法
VSC怎样用终端运行PHP_命令行执行脚本的步骤【教程】
Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度
c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】
XML的“混合内容”是什么 怎么用DTD或XSD定义
windows系统找不到无线网络怎么办_windows WLAN适配器故障排查
c++ unordered_map怎么用 c++哈希表用法【教程】
Windows电脑键盘突然失灵怎么办?(驱动与硬件排查)
Win11如何设置鼠标灵敏度_Win11鼠标灵敏度调整教程【攻略】
Go 中实现 Python urllib.quote() 功能的等效方法
Win10系统映像怎么恢复 Win10使用系统映像还原电脑【指南】
如何在Golang中写入XML文件_生成符合规范的XML数据
c# Task.ConfigureAwait(true) 在什么场景下是必须的
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
如何使用Golang搭建本地API测试环境_快速验证接口功能
如何使用Golang管理模块版本_Golanggo mod tidy与升级方法
php8.4xdebug无法调试怎么办_php8.4xdebug配置问题解决【解答】
c++如何用AFL++进行模糊测试 c++ Fuzzing入门【安全】
phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】
Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】
PHP 中如何在函数内持久修改引用变量所指向的目标
如何在 VS Code 中正确配置并使用 NumPy
2025-12-24
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。