uniapp uview 上传图片,数据以formData + File 形式传输

ops/2024/10/30 20:41:07/

期望

后端期望前端给的传参为 formData 形式, 同时文件的数据类型为File 形式.

解决过程

将文件处理为 File 格式

uview 中的 upload 组件点击上传之后不是标准的 File 形式,点击上传单个文件之后的控制台信息如下:

[{"url": "blob:http://localhost:8081/c16e50ca-767b-4de1-93b4-0446656c3e4d","progress": 0,"error": false,"file": {"name": "440k.jpg","lastModified": 1658970439074,"lastModifiedDate": {},"webkitRelativePath": "","size": 449462,"type": "image/jpeg"}}
]

故需对 file 内容进行二次加工. 将生成的 blob url 地址处理成 File 文件流形式.
代码如下:

// 上传图片回调
onChooseOne(lists) {console.log(lists)// 将获取到的信息放入上传列表中this.pushFileList('fileListOne', lists)
},
// 公共添加文件信息
async pushFileList(fileList, info) {this[fileList] = []info.forEach(async item => {// 加载blob文件const imgBlob = await fetch(item.url).then(r => r.blob())// 循环生成file文件流this[fileList].push({url: item.url,info: new File([imgBlob], item.file.name, {type: item.file.type})})})
},

最后处理完成之后形式如下:

<a class=uniapp uview 上传图片,数据以formData + File 形式传输" />

这时要传输的信息已经准备好

将数据其处理成 formData 形式
// 将数据处理成formData形式
addForm(params) {// 将json数据处理为form格式let newFile = new FormData();let keys = Object.keys(params);let values = Object.values(params);values.forEach((item, index) => {if (typeof item === 'object' && item) {item.forEach((item1) => {newFile.append(`${keys[index]}`, item1);});} else {newFile.append(`${keys[index]}`, item);}});return newFile;
},

同时需要更改 api 请求方式. 因为 uniapp 的 uni.request 默认不支持 formData 形式数据, 官网文档如下:

<a class=uniapp uview 上传图片,数据以formData + File 形式传输" />

所以我们退而求其次, 直接安装 axios 后, 直接使用 axios 进行请求. 我们需要为请求头增加 formData 请求类型, 最后封装后的 api 请求如下:

const url = 'xxx你的请求地址'
const config = {headers:{'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryXkII0NmP1jsvIgZC'}
};
return new Promise((resolve, reject) => {axios.post(url, data, config).then((res) => {resolve(res)}).catch((err) => {reject(err)})
})

结果

最后处理之后的请求数据为表单数据, 接口对接完毕:

<a class=uniapp uview 上传图片,数据以formData + File 形式传输" />


http://www.ppmy.cn/ops/129693.html

相关文章

浅谈钓鱼攻防之道-制作免杀excel文件钓鱼

如果我告诉你我很厉害&#xff0c;也许你会说我在吹牛。但是如果我告诉你我并不厉害&#xff0c;你肯定知道我在撒谎。 1、CSV注入之RCE CSV公式注入(CSV Injection)是一种会造成巨大影响的攻击向量&#xff0c;攻击这可以向Excel文件中注入可以输出或以CSV文件读取的恶意攻击…

Quartz定时框架

Quartz定时框架 官方定义&#xff1a; Quartz 是一个功能强大的开源任务调度框架&#xff0c;在 Java 领域广泛应用。它提供了丰富的 API 和灵活的配置方式&#xff0c;用于创建、调度和管理各种复杂的定时任务。在与 Spring 集成时&#xff08;基于 Spring 的 quartz 框架&a…

《模拟电子技术基础》第六版PDF课后题答案详解

《模拟电子技术基础》第六版是在获首届全国优秀教材建设奖一等奖的第五版的基础上&#xff0c;总结6年来的教学实践经验修订而成的新形态教材。为满足国家人才培养的需求&#xff0c;适应新型教学模式&#xff0c;并考虑到大多数院校逐渐减少课程学时的现状&#xff0c;在不降低…

【AI大模型】ChatGPT模型原理介绍

ChatGPT 是一种基于大规模深度学习语言模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;的 AI 模型。它使用自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;基于大量文本数据进行训练&#xff0c;通过生成式模型来理解和生成自然语言对话。以下是…

PostgreSQL触发器数据同步

背景 ctm02brss同步数据应用提供标准的视图库&#xff0c;支持把第三方的组织&#xff0c;人员&#xff0c;人脸数据同步到海康EBG的平台上 主要关键数据 组织&#xff1a;代表学校组织架构&#xff0c;如学院、专业、班级等&#xff0c;教师需在非班级节点&#xff0c;学生…

安装git-lfs发生报错Could not find Git; can not register Git LFS.解决方案

解决方案&#xff1a; 步骤1.安装Github-Deskop Download GitHub Desktop | GitHub Desktophttps://desktop.github.com/download/ 步骤2.安装 Git&#xff01; Git for WindowsWe bring the awesome Git VCS to Windowshttps://gitforwindows.org/ 这两个安装完成之后即可…

配置和排查 Lombok 在 IDEA 中使用的详细步骤

在日常开发中&#xff0c;Java 代码常常需要大量的样板代码&#xff0c;比如 getter、setter、toString 等方法。Lombok 是一个 Java 库&#xff0c;可以通过注解的方式&#xff0c;自动生成这些常见的代码&#xff0c;从而让代码更加简洁、清晰。比如&#xff0c;我们可以通过…

OOP 一些例题

例题一 #include <iostream> using namespace std;class Animal { public:Animal(string name) :name_(name) {}virtual void bark() 0; protected:string getName() { return name_; } private:string name_; };class Cat : public Animal { public:Cat(string name) …