首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pinata将文件引脚到IPFS

使用pinata将文件引脚到IPFS
EN

Ethereum用户
提问于 2021-12-13 11:18:21
回答 2查看 546关注 0票数 2

我正在使用皮纳塔,并试图将一些文件钉在ipfs上。这些文件来自用户输入,而不是从fs读取。具有以下代码:

代码语言:javascript
复制
export const deployFile = async (
  file: Express.Multer.File,
  httpService: HttpService,
): Promise => {
  const formData = new FormData();

  formData.append('file', Readable.from(file.buffer));

  try {
    const observable = httpService
      .post(process.env.PINATA_BASE_URL + '/pinning/pinFileToIPFS', formData, {
        headers: {
          'Content-Type': `multipart/form-data; boundary=${formData.getBoundary()}`,
          pinata_api_key: process.env.PINATA_API_KEY,
          pinata_secret_api_key: process.env.PINATA_API_SECRET_KEY,
        },
      })
      .pipe(map((response) => response.data));

    const response = await lastValueFrom(observable);

    return response.IpfsHash;
  } catch (error) {
    logger.error(`Error deploying image reason: ${error.response.data.error}`);
  }

总是命中错误Invalid request format.。如果使用以下方法从fs中读取文件,情况将如何:

代码语言:javascript
复制
const formData = new FormData();

formData.append('file', createReadStream(join(process.cwd(), '/images/1.jpeg')));

一切正常工作,文件被成功地固定在Pinata上。所以我想:Readable.from(file.buffer)createReadStream(join(process.cwd(), '/images/1.jpeg'))不同,知道如何将用户文件直接部署到ipfs,而不是从FS读取它们吗?

EN

回答 2

Ethereum用户

发布于 2022-08-30 18:35:48

如果您不想使用Pinata,那么从node.js方面来说这是一种简单的方法

代码语言:javascript
复制
async function storeImages(imagesDirPath) {
  const fullImagesPath = path.resolve(imagesDirPath);
  const files = fs.readdirSync(fullImagesPath);
  let responses = [];
  console.log("Uploading to Pinata !!!");
  console.log("paths ", fs.createReadStream(fullImagesPath + "/" + files[0]));
  for (fileIndex in files) {
    const readableStreamForFile = fs.createReadStream(
      `${fullImagesPath}/${files[fileIndex]}`
    );
    try {
      const response = await pinata.pinFileToIPFS(readableStreamForFile);
      responses.push(response);
    } catch (error) {
      console.log(error);
    }
  }
  return { responses, files };
}
async function storeTokeUriMetadata(metadata) {
  try {
    const response = await pinata.pinJSONToIPFS(metadata);
    return response;
  } catch (error) {
    console.log(error);
  }
  return null;
}

祝好运

票数 0
EN

Ethereum用户

发布于 2022-10-13 00:48:20

下面是一个示例如何使用

代码语言:javascript
复制
const { Readable } = require("stream");
const FormData = require("form-data");
const axios = require("axios");

(async () => {
  try {
    const base64 = "BASE64 FILE STRING;
    const imgBuffer = Buffer.from(base64, "base64");

    const stream = Readable.from(imgBuffer);
    const data = new FormData();
    data.append('file', stream, {
      filepath: 'FILENAME.png'
    })

    const res = await axios.post("https://api.pinata.cloud/pinning/pinFileToIPFS", data, {
      maxBodyLength: "Infinity",
      headers: {
          'Content-Type': `multipart/form-data; boundary=${data._boundary}`,
          pinata_api_key: pinataApiKey,
          pinata_secret_api_key: pinataSecretApiKey
      }
    });

    console.log(res.data);
  } catch (error) {
    console.log(error);
  }
})();
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/115498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档