查看图片代码 handlePicShow(fileId) { DocumentApi.fileDownload({ fileId: fileId }).then(res => { blobToBase64(res.data).then(res2 => { this.imageData = res2 }) }) this.showPictureDialog = true; },
时间: 2024-04-02 08:34:58 浏览: 166
这段代码是一个 JavaScript 方法,用于显示一张图片。它接受一个 `fileId` 参数,该参数用于从服务器中获取对应的图片文件。在获取到文件后,该方法将其转换成 base64 编码格式,然后将其存储在 `this.imageData` 变量中。最后,该方法将 `showPictureDialog` 变量设置为 true,以便显示图片对话框。
相关问题
v.pics.forEach((u, i) => { if (u.split('/')[0] == 'cloud:') {} else { picCursor.push(i) tmpPromise.push( wx.getFileInfo({ filePath: u, success: function(res) { if (res.size > 200 * 1024) { wx.compressImage({ src: u, quality: 30, }).then(res => { return wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: res.tempFilePath, }) }) } else { picCursor.push(i) wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: u, }) } }, fail: function(res) { console.log('获取文件信息失败') } }) ) } })请指出这段代码存在哪些问题,请修复问题,把正确的带啊吗发给我
这段代码存在以下问题:
1. `tmpPromise` 数组中的 Promise 并没有被等待执行,而是直接被推入了数组中,需要使用 `Promise.all()` 等待所有 Promise 执行完毕。
2. `wx.compressImage()` 和 `wx.cloud.uploadFile()` 方法都是异步的,需要使用 `async/await` 或者 `.then()` 对它们进行串联执行。
3. `tmpPromise` 数组中的元素并没有被处理,需要对它们进行处理,例如可以使用 `Promise.all()` 处理所有的 Promise,然后使用 `picCursor` 数组过滤掉处理成功的图片。
修复后的代码如下:
```
const promises = v.pics.map(async (u, i) => {
if (u.split('/')[0] == 'cloud:') {
return Promise.resolve();
} else {
try {
const res = await wx.getFileInfo({
filePath: u
});
if (res.size > 200 * 1024) {
const compressed = await wx.compressImage({
src: u,
quality: 30,
});
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: compressed.tempFilePath,
});
} else {
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: u,
});
}
} catch (e) {
console.error('获取文件信息失败', e);
return Promise.resolve();
}
}
});
const results = await Promise.all(promises);
const picCursor = results.map((result, index) => {
if (result && result.fileID) {
return index;
}
return -1;
}).filter(index => index >= 0);
```
const db = wx.cloud.database() Page({ /** * 页面的初始数据 */ data: { tempImgList:[], cloudDetailImage:[] }, onLoad: function (options) { }, onShow: function () { this.getTypeGoodsList() }, getTypeGoodsList(){ db.collection('good_Type').get() .then(res=>{ console.log("查找分类目录成功",res) let List = res.data let typeList=[] for(let i =1;i<List.length;i++){ typeList.push(List[i]) } this.setData({ typeList:typeList }) }) .catch(res=>{ console.log("查找分类目录失败",res) }) }, getType(event){ console.log(event) this.setData({ currentIndex:event.currentTarget.dataset.index, type_nameCN:this.data.typeList[event.currentTarget.dataset.index].type_nameCN }) }, chooseDetailImage(){ var that = this; wx.chooseMedia({ count: 9, mediaType: ['image','video'], sourceType: ['album', 'camera'], maxDuration: 30, camera: 'back', success(res) { console.log(res.tempFiles.tempFilePath) console.log(res.tempFiles.size) //上传图片 that.uploadImageDetail() } }) }, uploadImageDetail(){ var that = this; for(let l in this.data.tempImgList){ wx.cloud.uploadFile({ cloudPath: 'goodImage/${Math.random()}_${Date.now()}.${this.data.tempImgList[l].match(/\.(\w+)$/)[l]}', filePath: this.data.tempImgList[l], success(res){ console.log(res.fileID) that.data.cloudDetailImage.push(res.fileID) that.setData({ cloudDetailImage:that.data.cloudDetailImage }) } }) } } chooseDetailImage()没反应 underfined
你的代码中 `chooseDetailImage()` 函数定义了两次,导致后面的函数被覆盖掉了,可能是因为复制粘贴时出现错误。你可以尝试删除其中一个 `chooseDetailImage()` 函数,或者将它们合并成一个函数。另外,你需要检查一下 `this.data.tempImgList` 中的图片路径是否正确,并且确认你的小程序已经开启了相册或摄像头权限。如果仍然有问题,可以贴出完整的代码和报错信息,方便定位问题。
阅读全文