使用supabase-wechat-stable-v2这个sdk用uni-app开发app,上传文件报错
-
@luca 用.upload()的话会出现我之前说的那个问题(见引用)。我目前的权宜做法是直接修改StorageFileApi.js的app_upload(),加上name参数:
app_upload(method, path, fileBody, fileOptions) { return __awaiter(this, void 0, void 0, function* () { try { const options = Object.assign(Object.assign({}, DEFAULT_FILE_OPTIONS), fileOptions); const headers = Object.assign(Object.assign({}, this.headers), (method === 'POST' && { 'x-upsert': String(options.upsert) })); // headers.Authorization = `Bearer ${this.supabaseKey}`; const cleanPath = this._removeEmptyFolders(path); const _path = this._getFinalPath(cleanPath); return new Promise((resolve, reject) => { uni.uploadFile({ url: `${this.url}/object/${_path}`, name: 'file', filePath: fileBody, header: headers, success: (uploadFileRes) => { resolve({ data: { path: cleanPath }, error: null }); }, fail: (err) => { reject({ data: null, error: err }); }, }); }); } catch (error) { if ((0, errors_1.isStorageError)(error)) { return { data: null, error }; } throw error; } }); }
注意这里的this.supabaseKey不存在,需要另外再传过去。
@yujichicago 在 使用supabase-wechat-stable-v2这个sdk用uni-app开发app,上传文件报错 中说:
@luca 而如果直接调用upload():
let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file)
则报错:
Error: module 'lib/formData.js' is not defined, require args is '../lib/formData.js'
-
@yujichicago 如果是开发微信小程序的话,你可以这样试试
wx.chooseMedia({ count: 1, sourceType: ['album'], //从相册选择 success: async (res) => { console.log(res,'resres') const file = res.tempFiles[0] const fileExt = res.tempFiles[0].tempFilePath.split('.').pop() const fileName = `${Math.random()}.${fileExt}` const filePath = `${fileName}` const { data, error } = await supabase.storage.from("avatars").upload(filePath, file); } });
-
@luca 是微信小程序,用vite+uniapp+vs code开发,在微信开发者工具上调试。
-
@yujichicago
您好,可以添加一下小助手,帮您辅助定位问题
-
@yujichicago 你是用uni-app开发什么,是app还是小程序,然后是什么什么调试的,是手机模拟器还是电脑浏览器
-
@luca 您好,我更新到最新的2.1.8版,运行您的例子还是报同样的错:
{"data":null,"error":{"errno":1001,"errMsg":"uploadFile:fail parameter error: parameter.name should be String instead of Undefined;"}}
似乎StorageFileApi.js里的app_upload()代码没有更新?
-
@yujichicago 不好意思才看到消息,我们已经更新好了,如果您是开发app并且用手机调试的话,您可以重新试试最新版本哦
-
@luca debug了一下,发现在app_upload()的uni.uploadFile参数里加上name并且在headers填上supabaseKey的值就可以了,能否更新一下?谢谢。
-
@luca 没办法解决吗?
-
@luca 而如果直接调用upload():
let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file)
则报错:
Error: module 'lib/formData.js' is not defined, require args is '../lib/formData.js'
-
@luca 您好,我也遇到了类似的问题,使用您提供的代码时提示:
{"data":null,"error":{"errno":1001,"errMsg":"uploadFile:fail parameter error: parameter.name should be String instead of Undefined;"}}
我怀疑是supabase-wechat-stable-v2\src\storage-js\src\packages\StorageFileApi.ts的第183行调用uni.uploadFile时没有传递name参数导致,能否确认一下?谢谢。
-
@awu 你好 上传图片那个问题你可以用这个api来上传,跟upload一样的用法,安装最新的supabase-wechat-stable-v2版本;示例代码如下:
upload() { uni.chooseImage({ count: 1, success: async (res) => { let str = res.tempFilePaths[0]; let lastIndex = str.lastIndexOf("/"); const file = str.substring(lastIndex + 1); const filePath = res.tempFilePaths[0]; const {data,error} = await supabase.storage .from("avatars") .unapp_upload(file, filePath); } }); },