UniApp文件上传(SpringBoot+Minio)

前端APP 投稿 52400 0 评论

UniApp文件上传(SpringBoot+Minio)

UniApp文件上传(SpringBoot+Minio)

一、Uni文件上传

(1)、文件上传的问题

UniApp文件上传文档

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

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

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处理返回结果

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)

赞同 (38) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽