首页 > 解决方案 > 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类型。

有任何想法吗?

标签: node.jsfileblobstorage

解决方案


你可以这样做:

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)


推荐阅读