当前位置:   article > 正文

UniApp文件上传(SpringBoot+Minio)

uniapp minio

UniApp文件上传(SpringBoot+Minio)

一、Uni文件上传

(1)、文件上传的问题

UniApp文件上传文档

  1. uni.uploadFile({
  2. url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
  3. files: 图片地址对象数组,
  4. formData: {
  5. 'user': 'test'
  6. },
  7. success: (res) => {
  8. console.log(res.data);
  9. }
  10. });

官方给出得使用方法,但是。。。图片对象数组要以key-value存储
name = 文件名称,uri = 文件地址路径
这样就会有一个问题,后端无法用数组或集合取值,因为官方说如果name一样或者不写

image

那总不能写n个参数,后台用n个参数接把、很 cao单 的问题

(2)、解决思路

百度若干个小时,听了一堆一摸一样的屁话,找到一篇文章说 MultipartRequest,于是后台就用这个接参数,发现可以接到。

1、首先

uni拿到上传文件的图片地址数组对象,然后把他转成uni要求的key-value格式

  1. //把传过来的图片path数组转为指定格式
  2. var filelist = [];
  3. for (var i = 0; i < imgList.length; i++) {
  4. var obj = {};
  5. obj.name = "img" + i;
  6. obj.uri = imgList[i];
  7. filelist.push(obj)
  8. }

这样第一张图叫 img0 、、以此类推

2、发送请求

传给后端之前,告诉后端总共有几张图片要传过去

  1. uni.uploadFile({
  2. url: 'https://www.example.com/upload', //仅为示例,非真实的接口地址
  3. files: 上边的filelist,
  4. formData: {
  5. //图片张数
  6. 'length': 上边的filelist.length
  7. },
  8. success: (res) => {
  9. console.log(res.data);
  10. }
  11. });
3、后端接参

上边说了,后端用MultipartRequest接收参数

  1. @PostMapping(value = "/upimg", headers = "content-type=multipart/form-data")
  2. @ApiOperation("多文件上传")
  3. public String upload(MultipartRequest request, Integer num) throws Exception {
  4. return Result.ok(this.MinioUtils.putObject(request, num));
  5. }
4、后端结合Minio的处理

上篇文章也说了 Minio 是怎么上传文件的

  1. public List<String> putObject(MultipartRequest request, Integer num) throws Exception {
  2. if (num == null || num < 1) {
  3. throw new CustomizeException(ErrorCode.UP_IMAGE_NUM_IS_NULL);
  4. }
  5. // bucket 不存在,创建
  6. if (!minioClient.bucketExists(this.bucket)) {
  7. minioClient.makeBucket(this.bucket);
  8. }
  9. InputStream inputStream;
  10. //返回的图片地址数组
  11. List<String> imgList = new ArrayList<>();
  12. try {
  13. //循环多文件上传
  14. for (int i = 0; i < num; i++) {
  15. request.getFile("img" + i)//循环取文件并上传
  16. imgList.add(文件地址);
  17. }
  18. } catch (Exception ex) {
  19. throw new CustomizeException(ErrorCode.UP_IMAGE_ERROR);
  20. }
  21. return imgList;
5、uni处理返回结果

uni收到的返回结果是 String要做下处理才能使用

  1. success: (res) => {
  2. JSON.parse(res.data);
  3. }

二、文件上传的异步问题

uni的文件上传因为是异步,所以也要做些处理

  1. export function upup(list) {
  2. //把传过来的图片path数组转为指定格式
  3. var filelist = [];
  4. for (var i = 0; i < list.length; i++) {
  5. var obj = {};
  6. obj.name = "img" + i;
  7. obj.uri = imgList[i];
  8. filelist.push(obj)
  9. }
  10. return new Promise((resolve, reject) => {
  11. //上传图片
  12. uni.uploadFile({
  13. url: 请求地址,
  14. files: filelist,
  15. formData: {
  16. 'num': 图片张数
  17. },
  18. header: {
  19. "Content-Type": "multipart/form-data"
  20. },
  21. success: (res) => {
  22. //返回的是字符需要转json
  23. resolve(JSON.parse(res.data))
  24. },
  25. fail: (res) => {
  26. reject
  27. }
  28. })
  29. })
  30. }

调用的时候

  1. upup.then(res => {
  2. //在此处做处理,因为是异步所以此处的res只能在此处用
  3. //无法声明变量把res赋值给他
  4. //因为赋值完毕后res还没跑完
  5. })

完~,百度一查一群篮子货在哪儿复制粘贴博客,几页的答案一摸一样,一群篮子货。如有需要转载,记得标明出处。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号