当前位置:首页 > JavaScript

js实现文件的上传

2026-04-03 23:09:35JavaScript

使用HTML表单实现文件上传

在HTML中创建一个表单,设置enctypemultipart/form-data,并包含一个input类型为file的元素:

<form id="uploadForm" enctype="multipart/form-data">
  <input type="file" id="fileInput" name="file">
  <button type="submit">上传</button>
</form>

通过JavaScript处理上传

使用FormData对象收集文件数据,并通过fetchXMLHttpRequest发送到服务器:

document.getElementById('uploadForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const fileInput = document.getElementById('fileInput');
  const formData = new FormData();
  formData.append('file', fileInput.files[0]);

  fetch('/upload', {
    method: 'POST',
    body: formData
  })
  .then(response => response.json())
  .then(data => console.log('上传成功:', data))
  .catch(error => console.error('上传失败:', error));
});

显示上传进度

使用XMLHttpRequestupload事件监听进度:

const xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
  if (e.lengthComputable) {
    const percent = (e.loaded / e.total) * 100;
    console.log(`上传进度: ${percent.toFixed(2)}%`);
  }
});
xhr.open('POST', '/upload');
xhr.send(formData);

多文件上传处理

通过multiple属性允许选择多个文件,并遍历添加到FormData

<input type="file" id="fileInput" name="files" multiple>
const fileInput = document.getElementById('fileInput');
const formData = new FormData();
Array.from(fileInput.files).forEach(file => {
  formData.append('files[]', file);
});

文件类型和大小验证

在上传前进行客户端验证:

js实现文件的上传

const file = fileInput.files[0];
const validTypes = ['image/jpeg', 'image/png'];
const maxSize = 5 * 1024 * 1024; // 5MB

if (!validTypes.includes(file.type)) {
  alert('仅支持JPEG/PNG格式');
  return;
}

if (file.size > maxSize) {
  alert('文件大小超过5MB限制');
  return;
}

使用第三方库简化操作

对于复杂需求,可考虑使用如Dropzone.jsUppy等专门的文件上传库,它们提供拖放支持、预览、分块上传等功能。

标签: 上传文件
分享给朋友:

相关文章

java如何读取文件

java如何读取文件

读取文件的常用方法 Java提供了多种读取文件的方式,适用于不同场景和需求。以下是几种常见的方法: 使用FileInputStream和BufferedInputStream读取二进制文件 try…

vue实现拖拽上传

vue实现拖拽上传

Vue 拖拽上传实现方法 使用 HTML5 原生拖拽 API 在 Vue 中可以通过监听原生拖拽事件实现基础功能: <template> <div class="dr…

vue实现语音上传

vue实现语音上传

实现语音上传功能 在Vue中实现语音上传功能需要结合浏览器的Web Audio API和文件上传逻辑。以下是一个完整的实现方案: 录音功能实现 安装依赖库recorder-core和wav编码器:…

vue预览文件实现

vue预览文件实现

实现文件预览功能 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、文档等)和需求。以下是几种常见实现方法: 图片文件预览 使用HTML5的FileReader AP…

vue用户实现头像上传

vue用户实现头像上传

前端实现头像上传(Vue + Element UI) 环境准备 确保项目已安装element-ui和axios(或其他HTTP库): npm install element-ui axios 组件代…

vue前端实现文件预览

vue前端实现文件预览

Vue 前端实现文件预览的方法 图片预览 使用 <input type="file"> 结合 URL.createObjectURL() 实现本地图片预览: <template&g…