小程序大家应该都知道,通过上传组件得到的都是本地的一个临时路径,这个路径是不能被外网访问的,所以我们就需要将拿到的临时路径转成Base64上传到后台服务器。或者说是另外一个办法,就是通过组件直接上传文件,这个看需求设计吧。
一、Base64上传
1.下载图片转换工具image-tools
NPM
--安装组件
npm i image-tools --save
--引用组件
import { pathToBase64, base64ToPath } from 'image-tools'
2.通过组件上传
// 新增图片
async afterRead(event) {
// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
console.log(event.file.url);
pathToBase64(event.file.url).then(base64 => {
console.log(base64);
uni.request({
url: '后台上传地址',
method: 'POST',
data: {
image: base64,
},
success: (res) => {
if (res.data.code == 200) {
} else {
}
},
fail: (error) => {
console.log(error);
}
})
}).catch(error => {
console.error(error);
})
}
二、文件上传
// 新增图片
async afterRead(event) {
// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
console.log(event.file.url);
const result = await this.uploadFilePromise(event.file.url)
this.model.image = result;
},
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: '后台上传地址', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
formData: {
user: 'test'
},
success: (res) => {
setTimeout(() => {
resolve(res.data)
}, 1000)
}
});
})
}
这两种上传方式都可以实现小程序的文件图片上传,记录一下。