JS上传图片流

使用 JavaScript 将图片上传到服务器,有两种处理方式:FormData 和 FileReader。

FormData 方式

javascript
const fileInput = document.getElementById('file-input');
const xhr = new XMLHttpRequest();
const formData = new FormData();

xhr.open('POST', '/upload-image');

// 将文件添加到表单对象中
formData.append('image', fileInput.files[0]);

xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
    alert('上传成功!');
  }
};

xhr.send(formData);

以上代码使用了 XMLHttpRequest 对象提交 FormData 表单数据,其中的 FormData 对象是 HTML5 中新增的对象。在表单内容类型为 multipart/form-data 类型时常被用来上传文件或二进制数据到服务器。可以通过 append() 方法把文件和其他表单参数一起发出去,在服务器端接收并解析 FormData,从而完成文件上传功能。

FileReader 方式

javascript
const fileInput = document.getElementById('file-input');

fileInput.addEventListener('change', function() {
  const file = fileInput.files[0];
  const reader = new FileReader();

  reader.onload = function(event) {
    const image = event.target.result;

    // 发送 base64 编码的图片到服务器
    const xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload-image');
    xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
        alert('上传成功!');
      }
    };
    xhr.send(JSON.stringify({ image }));
  };

  reader.readAsDataURL(file);
});

以上代码使用了 FileReader 对象读取上传的文件内容并以 base64 的方式编码为字符串,然后使用 XMLHttpRequest 对象将该字符串发送到服务器。可以在服务器端接收 base64 编码的图片,进行解码后再保存到文件中。

总的来说,使用 FormData 方式上传图片比较简单易用,而且可以直接使用 multipart/form-data 格式来上传文件,不需要手动对二进制数据进行编码/解码。使用 FileReader 方式可以压缩图片和控制上传质量,在客户端能够显示图片预览,但是需要对上传数据进行手动编码。需要根据实际需求选择适合自己的上传方式。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`el-upload` 是 Element UI 提供的一个用于文件上传的功能组件,它支持处理文件(file stream),在前端可以方便地让用户选择并上传文件,常用于图片、文件等的批量上传或实时预览。 在 Vue.js 中,`el-upload` 的基本用法包括以下几个关键部分: 1. 定义组件:引入 Element UI 并创建一个 `el-upload` 组件实例,设置上传属性如 `action` (服务器接收文件的 URL)、`on-change` (文件选择后触发的方法) 和 `on-success` (上传成功后的回调) 等。 ```html <template> <el-upload action="your-api-url" :on-change="handleChange" :on-success="handleSuccess" accept="image/*,application/pdf" <!-- 可选,限制可上传的文件类型 --> > <i class="el-icon-upload"></i> <div class="el-upload__text">点击上传</div> </el-upload> </template> <script> import { ElUpload } from 'element-ui'; export default { components: { ElUpload, }, methods: { handleChange(file) { // 处理文件选择事件,例如显示预览、进度等 }, handleSuccess(response, file) { // 文件上传成功后执行的操作,通常会从response中解析文件信息 }, }, }; </script> ``` - `handleChange` 方法会在用户选择文件后被调用,你可以在这里展示文件预览、获取文件信息等。 - `handleSuccess` 在文件上传完成后被调用,参数通常是服务器返回的数据和原始文件对象。 对于文件处理,如果需要在后台处理大文件上传,而不是一次性将整个文件内容发送到服务器,可以通过分块上传的方式实现。`el-upload` 提供了一些选项(如 `before-upload`、`on-exceed`)来控制这个过程。 相关问题: 1. 如何配置 `el-upload` 进行文件的分块上传? 2. 如何在 `el-upload` 中处理大文件的进度更新? 3. 如何取消 `el-upload` 中正在进行的上传请求?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值