0

私のプロジェクトの性質上、Pinata SDK 経由で IPFS にアップロードしようとしている画像 dataURL (実際の画像ファイルではない) があります。画像 dataURL を buffer(array) に変換し、2 つの異なる方法を試しましたが、どれも機能しません。これが私のコードです:

サンプル1

var myBlob = new Blob([new Uint8Array(myBuffer)]);
var myReadableStream = myBlob.stream()
pinata.pinFileToIPFS(myReadableStream)

エラー: 未処理の拒否 (TypeError): source.on は関数ではありません

サンプル 2

var myBlob = new Blob([new Uint8Array(myBuffer)]);

var myHeaders = new Headers();
myHeaders.append("pinata_api_key", "MY_KEY");
myHeaders.append("pinata_secret_api_key", "MY_SECRET_KEY");

var formdata = new FormData();
formdata.append("test", myBlob);

var requestOptions = {
method: 'POST',
headers: myHeaders,
body: formdata,
redirect: 'follow'
};

fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", requestOptions)
.then(response => response.text())
.then(result => console.log('result',result))
.catch(error => console.log('error', error));

エラー: 400 Bad Request、結果 {"エラー":"予期しないフィールド"}

4

1 に答える 1

0

バッファを使用すると、少し扱いに​​くい場合があります。少し異なる方法でリクエストをフォーマットする必要があります。

誰かがこれを機能させる方法の例として、このコードスニペットを見てみましょう。

const pinataSDK = require("@pinata/sdk");
const pinata = pinataSDK(
  "Pinata API Key",
  "Pinata API Secret"
);
const { fs, vol } = require("memfs");

(async () => {
  try {
    const base64 = "base64 file string";
    const buf = Buffer.from(base64, "base64");
    memfs.writeFileSync("File Name", buf);

    const read = vol.createReadStream("File Name");

    const res = await pinata.pinFileToIPFS(read);
    console.log(res);
  } catch (error) {
    console.log(error);
  }
})();

于 2021-11-26T15:16:18.787 に答える