node.js - Node.js:来自获取的 PNG URL 的新文件
问题描述
我目前正在尝试将图像上传到 Supabase 的存储中,这从文档中看起来相当简单
const { data, error } = await supabase.storage
.from('avatars')
.upload('public/avatar1.png', avatarFile)
不幸的是,Supabase 需要一个File
类型。
在我的 API 中,我有一个指向我要保存的图像的 url,在我的 URL 中获取图像作为 Node.js 中的文件的最佳方式是什么?
我试过这个:
let response;
try {
// fetch here is from the isomorphic-unfetch package so I can use it sever-side
response = await fetch('https://example.com/image.jpeg');
} catch (err) {
throw new Error(err);
}
let data = await response?.blob();
let metadata = {
type: 'image/jpeg',
};
let file = new File([data], 'test.jpg', metadata);
return file;
但我得到了一个ReferenceError: File is not defined
,这让我相信只有浏览器才能访问创建一个new File()
.
我能找到的只是关于 的答案fs
,我认为谷歌对此感到困惑。我不认为我可以fs
用来返回File
类型。
有任何想法吗?
解决方案
你可以这样做:
const fspromise = require('fs').promises;
let response;
try {
// fetch here is from the isomorphic-unfetch package so I can use it sever-side
response = await fetch('https://example.com/image.jpeg');
} catch (err) {
throw new Error(err);
}
let data = await response?.blob();
let metadata = {
type: 'image/jpeg',
};
const file = blob2file(data);
function blob2file(blobData) {
const fd = new FormData();
fd.set('a', blobData);
return fd.get('a');
}
const { data, error } = await supabase.storage
.from('avatars')
.upload('public/avatar1.png', file)
推荐阅读
- javascript - 使用 Angular 5 中的服务在两个不相关的组件之间共享数据
- c++11 - 用 && 声明局部值是否有任何值得优化的地方
- java - 有没有办法从 Java 类创建 POJO?
- java - 具有 java 不可修改列表实现和 createAndAdd 之类的方法的库?
- admin-on-rest - react-admin 中的树结构
- javascript - 健全性检查:`util.inherits(Child, Parent);`:附加到 Child 的原型属性的东西不应该影响 Parent 的属性?
- angular - angular 4 形式中至少需要一个字段
- c++ - 使用 wcstod 转换零值
- shell - xmlstarlet 替换模式后的值
- javascript - 如何在 JavaScript 中不可变地打乱数组?