元素
当前位置:首页 > JavaScript

js实现文件的上传

2026-02-28 22:42:22JavaScript

使用原生JavaScript实现文件上传

创建文件上传表单,包含一个<input type="file">元素

<input type="file" id="fileInput">
<button onclick="uploadFile()">上传文件</button>

通过JavaScript获取文件对象并上传

function uploadFile() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (!file) {
    alert('请选择文件');
    return;
  }

  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);
  });
}

使用XMLHttpRequest实现文件上传

创建XMLHttpRequest对象发送文件

function uploadWithXHR() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (!file) return;

  const xhr = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('file', file);

  xhr.open('POST', '/upload', true);

  xhr.upload.onprogress = function(e) {
    if (e.lengthComputable) {
      const percentComplete = (e.loaded / e.total) * 100;
      console.log('上传进度:', percentComplete + '%');
    }
  };

  xhr.onload = function() {
    if (xhr.status === 200) {
      console.log('上传完成');
    }
  };

  xhr.send(formData);
}

实现多文件上传

修改HTML允许选择多个文件

<input type="file" id="multiFileInput" multiple>
<button onclick="uploadMultipleFiles()">上传多个文件</button>

JavaScript处理多个文件上传

function uploadMultipleFiles() {
  const fileInput = document.getElementById('multiFileInput');
  const files = fileInput.files;

  if (files.length === 0) return;

  const formData = new FormData();
  for (let i = 0; i < files.length; i++) {
    formData.append('files[]', files[i]);
  }

  fetch('/multi-upload', {
    method: 'POST',
    body: formData
  })
  .then(response => response.json())
  .then(data => {
    console.log('多文件上传成功:', data);
  });
}

添加文件类型和大小验证

在文件上传前进行验证

function validateAndUpload() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];

  if (!file) return;

  // 允许的文件类型
  const allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
  // 最大文件大小5MB
  const maxSize = 5 * 1024 * 1024;

  if (!allowedTypes.includes(file.type)) {
    alert('不支持的文件类型');
    return;
  }

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

  // 验证通过后上传
  uploadFile();
}

显示上传进度

添加进度条显示上传进度

<div id="progressContainer" style="display: none;">
  <progress id="uploadProgress" value="0" max="100"></progress>
  <span id="progressPercent">0%</span>
</div>

更新JavaScript代码显示进度

js实现文件的上传

function uploadWithProgress() {
  const fileInput = document.getElementById('fileInput');
  const file = fileInput.files[0];
  const progressContainer = document.getElementById('progressContainer');
  const progressBar = document.getElementById('uploadProgress');
  const progressPercent = document.getElementById('progressPercent');

  if (!file) return;

  progressContainer.style.display = 'block';

  const xhr = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('file', file);

  xhr.open('POST', '/upload', true);

  xhr.upload.onprogress = function(e) {
    if (e.lengthComputable) {
      const percent = Math.round((e.loaded / e.total) * 100);
      progressBar.value = percent;
      progressPercent.textContent = percent + '%';
    }
  };

  xhr.onload = function() {
    if (xhr.status === 200) {
      setTimeout(() => {
        progressContainer.style.display = 'none';
      }, 1000);
    }
  };

  xhr.send(formData);
}

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

相关文章

vue文件下载实现

vue文件下载实现

使用 Blob 对象下载文件 在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。 axios.get('/api/…

php实现文件下载代码

php实现文件下载代码

实现文件下载的基本方法 使用PHP实现文件下载的核心是通过设置HTTP头部信息,强制浏览器触发下载行为而非直接显示文件内容。 $file_path = 'path/to/your/file.ext'…

vue实现文件预览

vue实现文件预览

Vue 实现文件预览的方法 文件预览功能通常涉及图片、PDF、Office文档等多种格式的处理。以下是几种常见文件类型的实现方案: 图片预览 使用 <input type="file">…

vue实现附件上传

vue实现附件上传

文件上传的基本实现 在Vue中实现文件上传可以通过原生HTML的<input type="file">元素结合Vue的数据绑定和事件处理来完成。创建一个文件上传组件,监听change事件获…

vue语音文件播放实现

vue语音文件播放实现

实现语音文件播放的方法 在Vue中实现语音文件播放可以通过HTML5的<audio>元素或JavaScript的Audio对象来完成。以下是几种常见的实现方式。 使用HTML5的audi…

vue实现文件下载a

vue实现文件下载a

Vue 实现文件下载的方法 使用 <a> 标签下载 通过动态创建 <a> 标签实现文件下载。适用于已知文件 URL 的情况: downloadFile(url, fi…