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: 存放静态文件, ...
随机推荐
- 上传文件到阿里云linux服务器(windows到Linux的文件上传)
在"运行"中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下命令格式: F:\PuTT ...
- 如果有大量的 key 需要设置同一时间过期,一般需要注意什么?
如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能 会出现短暂的卡顿现象.一般需要在时间上加一个随机值,使得过期时间分散一 些.
- 一个 Redis 实例最多能存放多少的 keys?List、Set、 Sorted Set 他们最多能存放多少元素?
理论上 Redis 可以处理多达 232 的 keys,并且在实际中进行了测试,每个实 例至少存放了 2 亿 5 千万的 keys.我们正在测试一些较大的值.任何 list.set. 和 sorted ...
- github 编写README时常用的写法
参考:https://github.com/HeTingwei/ReadmeLearn#%E7%BC%96%E5%86%99readme%E6%97%B6%E5%B8%B8%E7%94%A8%E7%9 ...
- js技术之input只读功能可以通过js设置readonly
一.input标签 输入项标签,不同type属性,会有不同的显示效果和不同的作用 input标签的属性: disabled:表单项禁用,不可修改值,也不会被提交 readonly:表单项只读,不可修改 ...
- CSS3渐变效果工具
推荐一个css3渐变效果工具,觉得有帮助的可以收藏下. 工具链接 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡.CSS3 定义了两种类型的渐变(gradient ...
- 好用开源的C#快速开发平台
NFine 是基于 C# 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展,让Web开发更迅速.简单.NFine是一套基于 ASP.NET ...
- Day05 - Flex 实现可伸缩的图片墙 中文指南
Day05 - Flex 实现可伸缩的图片墙 中文指南 作者:liyuechun 简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战.项目免费提供了 30 个视频教程.30 ...
- ES6实战:新数字方法
本文翻译自:https://www.sitepoint.com/es6... 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 本文介绍了ES6中全新的数字方 ...
- 快如闪电,触控优先。新一代的纯前端控件集 WijmoJS发布新版本了
全球最大的控件提供商葡萄城宣布,新一代纯前端控件 WijmoJS 发布2018 v1 版本,进一步增强产品功能,并支持在 Npm 上的安装和发布,极大的提升了产品的易用性. WijmoJS 是用 Ty ...