onChooseAvatar1() { let that = this wx.chooseMessageFile ({ count: 1, success(res) { let tempFiles = res.tempFiles; let paths = tempFiles.map(file => file.path); // 提取路径 if (this.data.imgList.length != 0) { this.setData({ imgList: this.data.imgList.concat(paths) // 添加路径 }) } else { this.setData({ imgList: paths // 添加路径 }) } wx.uploadFile({ url: app.d.laikeUrl+'&action=user&m=upload', filePath: that.data.avatarUrl1, name: 'file', success(res) { that.data.navatarUrl1 = res.data; console.log('上传成功:', res.data); } }) }, fail(res){ console.log("选择失败",res) } }) },如何修正错误
时间: 2024-02-14 08:14:50 浏览: 78
在这段代码中,您使用了 `wx.chooseMessageFile()` 方法来选择上传的文件,并在成功回调中执行了上传操作。然而,您在上传操作中使用了 `that.data.avatarUrl1` 作为文件路径,而实际上应该使用 `paths` 变量来代替,因为它是您从选择文件成功回调中获取到的文件路径。
因此,您需要将 `wx.uploadFile()` 方法中的 `filePath` 属性改为 `paths`,即:
```
wx.uploadFile({
url: app.d.laikeUrl+'&action=user&m=upload',
filePath: paths,
name: 'file',
success(res) {
that.data.navatarUrl1 = res.data;
console.log('上传成功:', res.data);
}
})
```
这样就可以上传正确的文件了。同时,您还需要注意的是,在选择文件成功回调中,应该将 `this` 关键字改为 `that`,以避免在回调函数中出现 `this` 上下文丢失的问题。
相关问题
// 第二次上传头像 onChooseAvatar1() { let that = this wx.chooseMessageFile ({ count: 1, success(res) { let tempFiles = res.tempFiles; let paths = tempFiles.map(file => file.path); // 提取路径 if (this.data.imgList.length != 0) { this.setData({ imgList: this.data.imgList.concat(paths) // 添加路径 }) } else { this.setData({ imgList: paths // 添加路径 }) } wx.uploadFile ({ url: app.d.laikeUrl+'&action=user&m=upload', filePath: paths, name: 'file', success(res) { that.data.navatarUrl1 = res.data; console.log('上传成功:', res.data); }}) }, fail(res){ console.log("选择失败",res) } }) },依旧设置失败
如果您的代码还是出现上传失败的问题,我们需要进一步检查以下几点:
1. 检查上传的路径是否正确,您可以通过在控制台输出 `paths` 变量来检查路径是否正确。
2. 检查上传的接口是否正确,您可以通过在控制台输出 `app.d.laikeUrl+'&action=user&m=upload'` 变量来检查接口是否正确。
3. 检查上传的文件大小是否超出了服务器的限制。有些服务器可能会限制上传文件的大小,如果上传的文件大小超出了服务器的限制,那么上传就会失败。您可以通过在接口文档或与服务器管理员联系来确认服务器的上传文件大小限制。
4. 检查网络连接是否正常。如果网络连接不稳定或中断,那么上传也会失败。您可以尝试在其他网络环境下进行上传,以确认网络连接是否正常。
如果以上步骤都没有解决问题,您可以尝试将上传文件的接口地址和参数换成其他相似的接口,以检查是否是接口的问题。同时,您还可以在控制台查看上传失败的具体错误信息,以帮助您更好地定位问题。
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` 中的图片路径是否正确,并且确认你的小程序已经开启了相册或摄像头权限。如果仍然有问题,可以贴出完整的代码和报错信息,方便定位问题。
阅读全文