UniApp文件上传(SpringBoot+Minio)
UniApp文件上传(SpringBoot+Minio)
一、Uni文件上传
(1)、文件上传的问题
uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
files: 图片地址对象数组,
formData: {
'user': 'test'
},
success: (res) => {
console.log(res.data);
}
});
官方给出得使用方法,但是。。。图片对象数组要以key-value存储
name = 文件名称,uri = 文件地址路径
这样就会有一个问题,后端无法用数组或集合取值,因为官方说如果name一样或者不写
那总不能写n个参数,后台用n个参数接把、很 cao单 的问题
(2)、解决思路
百度若干个小时,听了一堆一摸一样的屁话,找到一篇文章说 MultipartRequest,于是后台就用这个接参数,发现可以接到。
1、首先
uni拿到上传文件的图片地址数组对象,然后把他转成uni要求的key-value格式
//把传过来的图片path数组转为指定格式
var filelist = [];
for (var i = 0; i < imgList.length; i++) {
var obj = {};
obj.name = "img" + i;
obj.uri = imgList[i];
filelist.push(obj)
}
这样第一张图叫 img0 、、以此类推
2、发送请求
传给后端之前,告诉后端总共有几张图片要传过去
uni.uploadFile({
url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
files: 上边的filelist,
formData: {
//图片张数
'length': 上边的filelist.length
},
success: (res) => {
console.log(res.data);
}
});
3、后端接参
上边说了,后端用MultipartRequest接收参数
@PostMapping(value = "/upimg", headers = "content-type=multipart/form-data")
@ApiOperation("多文件上传")
public String upload(MultipartRequest request, Integer num) throws Exception {
return Result.ok(this.MinioUtils.putObject(request, num));
}
4、后端结合Minio的处理
上篇文章也说了 Minio 是怎么上传文件的
public List<String> putObject(MultipartRequest request, Integer num) throws Exception {
if (num == null || num < 1) {
throw new CustomizeException(ErrorCode.UP_IMAGE_NUM_IS_NULL);
}
// bucket 不存在,创建
if (!minioClient.bucketExists(this.bucket)) {
minioClient.makeBucket(this.bucket);
}
InputStream inputStream;
//返回的图片地址数组
List<String> imgList = new ArrayList<>();
try {
//循环多文件上传
for (int i = 0; i < num; i++) {
request.getFile("img" + i)//循环取文件并上传
imgList.add(文件地址);
}
} catch (Exception ex) {
throw new CustomizeException(ErrorCode.UP_IMAGE_ERROR);
}
return imgList;
5、uni处理返回结果
uni收到的返回结果是 String要做下处理才能使用
success: (res) => {
JSON.parse(res.data);
}
二、文件上传的异步问题
uni的文件上传因为是异步,所以也要做些处理
export function upup(list) {
//把传过来的图片path数组转为指定格式
var filelist = [];
for (var i = 0; i < list.length; i++) {
var obj = {};
obj.name = "img" + i;
obj.uri = imgList[i];
filelist.push(obj)
}
return new Promise((resolve, reject) => {
//上传图片
uni.uploadFile({
url: 请求地址,
files: filelist,
formData: {
'num': 图片张数
},
header: {
"Content-Type": "multipart/form-data"
},
success: (res) => {
//返回的是字符需要转json
resolve(JSON.parse(res.data))
},
fail: (res) => {
reject
}
})
})
}
调用的时候
upup.then(res => {
//在此处做处理,因为是异步所以此处的res只能在此处用
//无法声明变量把res赋值给他
//因为赋值完毕后res还没跑完
})
完~,百度一查一群篮子货在哪儿复制粘贴博客,几页的答案一摸一样,一群篮子货。如有需要转载,记得标明出处。
UniApp文件上传(SpringBoot+Minio)的更多相关文章
- minio实现文件上传下载和删除功能
https://blog.csdn.net/tc979907461/article/details/106673570?utm_medium=distribute.pc_relevant_t0.non ...
- Springboot 一行代码实现文件上传 20个平台!少写代码到极致
大家好,我是小富~ 技术交流,公众号:程序员小富 又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,d ...
- SpringBoot 文件上传临时文件路径问题
年后放假回来,一向运行OK的项目突然图片上传不了了,后台报错日志如下: java.io.IOException: The temporary upload location [/tmp/tomcat. ...
- springboot文件上传下载简单使用
springboot的文件上传比较简单 一.使用默认的Resolver:StandardServletMultipartResolver controller package com.mydemo.w ...
- springboot实现简单的文件上传
承接上一篇,这里记录一下简单的springboot文件上传的方式 首先,springboot简单文件上传不需要添加额外的jar包和配置 这里贴一下后端controller层的实现代码 补一份前台的HT ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- 补习系列(11)-springboot 文件上传原理
目录 一.文件上传原理 二.springboot 文件机制 临时文件 定制配置 三.示例代码 A. 单文件上传 B. 多文件上传 C. 文件上传异常 D. Bean 配置 四.文件下载 小结 一.文件 ...
- springboot+web文件上传和下载
一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...
- springBoot(3)---目录结构,文件上传
目录结构,文件上传 一.目录结构 1.目录讲解 src/main/java:存放代码 src/main/resources static: 存放静态文件, ...
随机推荐
- Java 中用到的线程调度算法是什么?
计算机通常只有一个 CPU,在任意时刻只能执行一条机器指令,每个线程只有获得 CPU 的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线 程轮流获得 CPU 的使用权,分别执行各自 ...
- 数组有没有length()方法?String有没有length()方法?
数组没有length()方法,有length 的属性.String 有length()方法.JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆.
- 启动一个线程是调用 run()还是 start()方法?
启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态, 这意味着它可以由 JVM 调度并执行,这并不意味着线程就会立即运行.run()方 法是线程启动后要进行回调(callb ...
- 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试 Spring MVC 应用程序.在上面显示的快照中,我们只想启动 ToTestController. 执行 ...
- Centos最小化安装
1.选择最小安装: 2.选择相应的安装包 老男孩提示: 1.根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全. 2.如果安装过程落了部分包 ...
- 3.Spark设计与运行原理,基本操作
1.Spark已打造出结构一体化.功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能. Spark生态系统主要包含Spark Core.Spark SQL.Spark St ...
- CPU架构:CPU架构详细介绍
1 概述 CPU架构是CPU商给CPU产品定的一个规范,主要目的是为了区分不同类型的CPU.目前市场上的CPU分类主要分有两大阵营,一个是intel.AMD为首的复杂指令集CPU,另一个是以IBM.A ...
- python中PIL库的使用
API参考 打开dos窗口,安装库: pip install pillow 很明显,图片有点大,咱们缩略一下: from PIL import Image im = Image.open(" ...
- 顺利通过EMC试验(2)
限制值 电磁波照射,静电放电敏感性
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...