前端上传二进制格式图片数据到后端接口的实现方法

需求描述:

选择本地图片,请求上传图片接口,上传图片接口请求成功后,返回图片线上地址信息,根据图片线上地址信息在页面中显示保存好的图片

上传接口需要图片信息字段格式:二进制

实现方法:

使用 onChange 方法监听 type=“file” input输入框的文件选择动作,在 onChange 方法中请求图片上传接口,请求成功后将返回的图片地址信息保存,显示在页面上

提示:上传到接口的图片信息需要二进制格式,可以使用 FormData 实现

在这里插入图片描述
可以F12,查看接口请求信息,请求头发送的数据格式是否为 “Content-Type: multipart/form-data;”

在这里插入图片描述
在这里插入图片描述

示例:

示例代码使用项目框架: react + ts

html:

<img src="保存后图片线上地址" />
<input type="file" onChange={ 
        uploadImgFn} />

ts:

async function uploadImgFn(e: any) {
    
    
    const form = new FormData();
    const file = e.target.files[0];  // 获取图片信息
    form.append('pic', file);  // 根据接口所需字段,定义 formdata 的 key 和 value

    try {
    
    
      await uploadImgAPI(form); // 根据实际写对应接口
    } catch (e) {
    
    }
  }

遇到问题:使用 FormData 后上传至接口,数据不是 二进制格式

我在请求接口前 使用了 formdata 设置数据,但是传递到接口,接收到数据不是二进制的,
检查 数据格式不是 “Content-Type: multipart/form-data;”,

在这里插入图片描述
在这里插入图片描述

查看:
项目使用了 umi,封装接口请求文件中,加入了 是否使用formdata 数据格式的判断,是的话,将数据转成formdata 格式,否则普通处理

在这里插入图片描述
在这里插入图片描述
解决方法:
①在请求接口中,添加 formdata: true
在这里插入图片描述
②文件中调用请求接口时,不用先用 formdata 了,直接传递所需键值对,封装的的接口请回会处理成 formdata 格式

  async function uploadImgFn(e: any) {
    
    
    const file = e.target.files[0];
    try {
    
    
      await postProjectImgAPI({
    
     pic: file }, id);
    } catch (e) {
    
    }
  }

如果遇到使用 formdata 后 传递给接口的数据不是二进制的情况,可以检查请求头发送数据格式是否正确,不正确的话检查自己代码请求设置

猜你喜欢

转载自blog.csdn.net/qq_39111074/article/details/130425223