1.需求
在上传成功的图片后面拼接上该图片的宽高值
2.实现
上传图片到阿里OSS上并获取到图片的信息(阿里官网文档)
private async uploadCoverSuccess(val: string) {
this.form.imageUrl = this.getImgUrl(val)
console.log(this.form.imageUrl, '处理图片的结果')
}
private async getImgUrl(val : string) {
const index = val.indexOf('?')
let img = ''
let nowImg = ''
let imgUrl = ''
if (index > -1) {
img = val.substr(0, index)
nowImg = val.substr(0, index) + '?x-oss-process=image/info'
} else {
img = val
nowImg = val + '?x-oss-process=image/info'
}
axios.get(nowImg).then(result => {
imgUrl = img + `?x-oss-process=image/resize,w_${
result.data.ImageWidth.value},h_${
result.data.ImageHeight.value}`
console.log(imgUrl, '图片的地址')
return imgUrl
})
}
请求图片信息接口是成功的,拼接图片的宽高后都是正常打印的
但是在上传图片成功回调函数中调用接口方法输入
[[PromiseState]]: “fulfilled”
[[PromiseResult]]: undefined
因axios返回值是异步操作,获取返回值时,请求操作还未完成,就已经执行了赋值,导致结果返回undefined。
修改代码为:
// 成功上传图片回调
private async uploadCoverSuccess(val: string) {
await this.getImgUrl(val).then(res => {
this.form.imageUrl = res
})
console.log(this.form.imageUrl, '处理图片的结果')
}
private async getImgUrl(val : string) {
const index = val.indexOf('?')
let img = ''
let nowImg = ''
let imgUrl = ''
if (index > -1) {
img = val.substr(0, index)
nowImg = val.substr(0, index) + '?x-oss-process=image/info'
} else {
img = val
nowImg = val + '?x-oss-process=image/info'
}
return axios.get(nowImg).then(result => {
imgUrl = img + `?x-oss-process=image/resize,w_${
result.data.ImageWidth.value},h_${
result.data.ImageHeight.value}`
console.log(imgUrl, '图片的地址')
return imgUrl
})
}
最后在控制台成功输出想要的结果