JavaScript如何实现文件上传_JavaScript如何读取文件内容并预览

26次阅读

javaScript文件上传与预览核心是FileReader(本地读取预览)和FormData(提交服务器)。FileReader支持readAsDataURL、readAsText(需指定UTF-8编码防乱码)、readAsArrayBuffer;FormData通过append添加文件,fetch或XHR上传,无需手动设Content-Type。

JavaScript如何实现文件上传_JavaScript如何读取文件内容并预览

javascript 实现文件上传和读取预览,核心在于 File API(尤其是 FileReader)与 FormData 的配合使用。前者负责本地读取和预览,后者负责将文件提交到服务器。

用 FileReader 读取文件并预览

适用于图片、文本等小文件的即时预览,不依赖服务器。

  • 监听 <input type="file">change 事件,获取 files[0]
  • 创建 new FileReader() 实例
  • 通过 readAsDataURL()(适合图片预览)、readAsText()(适合文本内容)、readAsArrayBuffer()(适合二进制处理)读取文件
  • onload 回调中拿到结果,更新页面元素(如 <img src="data:..." alt="JavaScript如何实现文件上传_JavaScript如何读取文件内容并预览" ><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;/code&gt; 显示文本)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;示例(图片预览):&lt;/p&gt; &lt;font color=&quot;#666&quot;&gt;&lt;pre class=&quot;brush:php;toolbar:false;&quot;&gt;const input = document.querySelector('input[type=&quot;file&quot;]'); input.addEventListener('change', (e) =&gt; { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = () =&gt; { document.querySelector('#preview').src = reader.result; }; reader.readAsDataURL(file); });</pre>

    </div> <h3>用 FormData 提交文件到服务器</h3> <p>实现真正的“上传”,需配合后端接口接收文件(如 express、PHP、spring Boot 等)。</p> <div class="aritcle_card"> <a class="aritcle_card_img" href="/ai/1508"> <img src="https://img.php.cn/upload/ai_manual/000/000/000/175680205299315.png" alt="Med-PaLM"> </a> <div class="aritcle_card_info"> <a href="/ai/1508">Med-PaLM</a> <p>来自 Google Research 的大型语言模型,专为医学领域设计。</p> <div class=""> <img src="/static/images/card_xiazai.png" alt="Med-PaLM"> <span>221</span> </div> </div> <a href="/ai/1508" class="aritcle_card_btn"> <span>查看详情</span> <img src="/static/images/cardxiayige-3.png" alt="Med-PaLM"> </a> </div> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/c1c2c2ed740f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Java免费学习笔记(深入)</a>”;</p> <ul> <li>创建 <code>new FormData()

  • append('fieldName', file) 添加文件(字段名需与后端约定一致)
  • 可额外添加其他表单字段,如 formData.append('desc', '用户头像')
  • fetchXMLHttpRequest 发送,注意不要设置 Content-Type浏览器会自动设为 multipart/form-data 并带上 boundary)

示例(fetch 上传):

const file = document.querySelector('input[type="file"]').files[0]; const formData = new FormData(); formData.append('avatar', file); // 后端接收字段名为 avatar  fetch('/upload', {   method: 'POST',   body: formData }) .then(res => res.json()) .then(data => console.log('上传成功:', data));

读取文本文件内容并显示(带编码处理)

中文文本文件若用 readAsText() 出现乱码,通常因未指定编码格式。

  • 推荐显式传入编码: reader.readAsText(file, 'UTF-8')
  • 支持常见编码如 'GBK'(需后端或用户明确告知),但浏览器原生只保证 UTF-8US-ASCII 可靠
  • 大文件建议分块读取或使用 stream + TextDecoder 避免内存压力(高级场景)

注意事项与常见问题

  • 安全限制:JS 无法直接读取文件路径(file.path 为空),仅能访问内容和元信息(name、size、type)
  • 跨域上传需服务端配置 CORS,如 access-Control-Allow-Origin
  • 大文件上传建议加进度条:监听 XMLHttpRequest.upload.onprogress 或使用 fetch 配合 ReadableStream(现代方案)
  • 多文件上传只需遍历 e.target.files 数组,逐个 append 到 FormData

以上就是JavaScript如何实现文件上传_JavaScript如何读取文件内容并预览的详细内容,更多请关注php中文网其它相关文章!

text=ZqhQzanResources