Supabase Storage API上传JPG成功却无预览及无法正常显示问题
解决Supabase代码上传图片无预览的问题
按以下步骤排查修复:
确认传入的
file对象有效性
必须确保file是原生File对象(比如从<input type="file">中直接获取的),如果是base64字符串或自定义Blob,先转成标准File对象再上传:// 示例:base64转File对象 function base64ToFile(base64Str, fileName) { const arr = base64Str.split(','); const mime = arr[0].match(/:(.*?);/)[1]; const bstr = atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n); while(n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], fileName, { type: mime }); }同时检查File对象的
type属性是否为image/jpeg,确保和文件实际格式匹配。移除手动指定的
contentType参数
手动设置的MIME类型可能和文件实际编码不匹配,试试让Supabase自动识别文件类型:const { data, error } = await this.supabase.storage.from('report-photos').upload(name, file);如果必须指定,严格和File对象的
type保持一致(比如File对象是image/jpeg就写这个,不要写成image/jpg)。验证文件上传完整性
上传成功后,通过下载接口对比原始文件和上传后文件的大小,确认内容没有损坏:const { data: downloadedBlob } = await this.supabase.storage.from('report-photos').download(name); console.log('原始文件大小:', file.size); console.log('上传后文件大小:', downloadedBlob.size);如果大小不一致,说明上传时文件流未正确读取,比如在框架中需确保文件已完全加载再执行上传操作。
规范文件命名
避免文件名包含中文、空格或特殊符号(如&、#),改用英文、数字和下划线组合,比如把旅游照片.jpg改为travel_photo.jpg,特殊字符可能导致URL解析或存储异常。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

