仅通过文件路径上传本地图片至Supabase的技术问询
仅通过本地文件路径上传至Supabase的解决方案
你遇到的问题核心是**fetch用于网络请求,无法直接读取本地文件系统路径**,得换用Node.js的文件系统模块处理本地文件,具体方案如下:
核心思路
在Node.js环境下(你用stability-client调用API,大概率是后端/脚本场景),通过fs模块读取本地文件为Buffer,再转成Blob或直接用Buffer上传至Supabase存储。
代码实现
import { createClient } from '@supabase/supabase-js'; import { readFile } from 'fs/promises'; import path from 'path'; // 初始化Supabase客户端(替换成你的Supabase项目信息) const supabase = createClient('你的Supabase项目URL', '你的Supabase服务端密钥'); async function uploadImageFromPath(localFilePath) { try { // 转成绝对路径(避免相对路径识别错误) const absolutePath = path.resolve(localFilePath); // 读取本地文件为Buffer const fileBuffer = await readFile(absolutePath); // 转为Blob(Supabase也支持直接传入Buffer) const imageBlob = new Blob([fileBuffer], { type: 'image/png' }); // 上传到Supabase存储桶 const { data, error } = await supabase.storage .from('你的存储桶名称') // 替换成你的目标存储桶名 .upload(`generated/${Date.now()}.png`, imageBlob, { contentType: 'image/png', upsert: false // 是否覆盖同名文件,按需设置 }); if (error) throw error; console.log('上传成功,文件路径:', data.path); } catch (err) { console.error('上传失败:', err.message); } } // 调用上传方法,传入你的本地文件路径 uploadImageFromPath('Users/johnsmith/Documents/projects/testProject/.out/fileName.png');
注意事项
- 若使用CommonJS规范,将
import替换为require即可 - 确保本地文件有读取权限,避免因权限不足报错
- Supabase存储桶需配置正确的上传权限(比如允许服务端密钥上传)
- 若不确定文件MIME类型,可借助
mime-types包自动识别:import mime from 'mime-types'; const mimeType = mime.lookup(localFilePath);
内容的提问来源于stack exchange,提问作者ronnie burns
相关产品推荐
相关产品推荐

