uniapp中的uni-file-picker组件上传多张图片到服务器,可添加,预览,删除图片

前言:在uniapp官方文档中的uni-file-picker组件可实现图片上传功能,官方文档:uniapp官网 中的案例不能完全满足需求,官网中默认的是上传到自带的服务空间

以下是代码:

view代码:
:auto-upload="false"加上这个取消自动上传

<uni-file-picker v-model="filePathsList" :auto-upload="false" file-mediatype="image" mode="grid"
fileMediatype="image"  @select="handleSelect" @delete="handleDelete" />

methods方法

选择图片

async handleSelect(res) {
	await this.uploadImg(res.tempFilePaths, 1);
},

上传图片

async uploadImg(tempFilePaths, token) {
	if (!tempFilePaths.length) return;  //如果没有选择图片就退出
	//循环选择图片的张数
	tempFilePaths.map(async () => {
		const path = tempFilePaths.pop();
		//因为我这个后台给的接口一次只能上传一张图片,所以每循环一次就调用接口上传一次
		const [err, {data}] = await uni.uploadFile({
			url: 'https://localhost/file/api/uploadtemp',//后台地址
			filePath: path,
			name: 'file',
			formData: {
				'user': 'test'
			},
		});
		//因为async返回的是个promise对象,所以要把返回的数据转为对象格式。
		let dataObj = JSON.parse(data)
		//每循环一次就把后台返回的图片地址添加到filePathsList数组
		this.filePathsList.push({
			url: dataObj.data,
			name: ""
		})
	})
	console.log('filePathsList', this.filePathsList);
	this.uploadImg(tempFilePaths, token);
},

删除图片

handleDelete(err) { // 删除图片
    const num = this.filePathsList.findIndex(v => v.url === err.tempFilePath);
    this.filePathsList.splice(num, 1);
},

上传事例:
在这里插入图片描述

参考http://t.csdn.cn/RWQ85这个博主写的,自己修改了一点。

疑问 参考博主的文章中这个代码 this.isGuid 不知道是什么意思,希望有人看到了可以讲解下。

if (!this.isGuid(data)) {
    // upload fail
    this.filePathsList.pop()
    uni.showToast({
        title: "上传失败",
        icon: "none"
    })
}else{
    // upload success
    this.filePathsList[this.filePathsList.length - 1].name = data
}

(自己的笔记)

  • 14
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
对于使用Uni-App开发者来说,可以使用Uni-File-Picker组件来实现图片上传的功能。下面是一个示例代码,展示了如何使用Uni-File-Picker组件上传图片: 1. 首先在页面的vue文件引入Uni-File-Picker组件: ``` <template> <view> <uni-file-picker :count="1" @success="uploadSuccess" @fail="uploadFail" ></uni-file-picker> <button type="primary" @click="upload">上传图片</button> </view> </template> <script> export default { methods: { uploadSuccess(files) { console.log('上传成功', files); // 在这里处理上传成功后的逻辑 }, uploadFail(err) { console.log('上传失败', err); // 在这里处理上传失败后的逻辑 }, upload() { uni.chooseImage({ count: 1, success: (res) => { const tempFiles = res.tempFiles; if (tempFiles.length > 0) { uni.uploadFile({ url: 'http://your-upload-url', filePath: tempFiles[0].path, name: 'file', success: (res) => { if (res.statusCode === 200) { const data = JSON.parse(res.data); if (data.code === 0) { this.uploadSuccess(data.files); } else { this.uploadFail(data.message); } } else { this.uploadFail('上传失败'); } }, fail: (err) => { this.uploadFail(err.errMsg); } }); } }, fail: (err) => { console.log('选择图片失败', err); } }); } } } </script> ``` 在上面的示例Uni-File-Picker组件用于选择图片文件,并通过`count`属性限制只能选择1张图片。当选择成功后,会触发`success`事件,调用`uploadSuccess`方法进行上传成功后的处理;当选择失败后,会触发`fail`事件,调用`uploadFail`方法进行上传失败后的处理。 在`upload`方法,首先使用`uni.chooseImage`选择图片,并通过`uni.uploadFile`将选图片上传服务器。在上传成功后,通过`uploadSuccess`方法处理上传成功后的逻辑;在上传失败后,通过`uploadFail`方法处理上传失败后的逻辑。 需要注意的是,示例上传接口URL需要根据实际情况进行修改。另外,还可以根据需要添加进度条等其他功能来完善上传图片的交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值