从 Google Apps 脚本将文件上传到 IPFS 节点

Upload a file to an IPFS node from Google Apps Script

我正在尝试使用 Google Apps 脚本 (GAS) 将文件上传到 IPFS 节点,但没有成功。 但是,我能够使用 Postman 成功上传文件。不幸的是,Postman 只返回最接近 GAS 的源代码片段作为 JavaScript - 获取代码,它不像在 GAS 中那样工作。

在 GAS 中,身份验证部分正在工作,我知道这是因为如果我正在更改不记名令牌,那么我会收到无效凭据错误而不是“无效请求格式”。

在我从服务器收到“请求格式无效”错误时附加测试代码。

出于测试目的,需要上传的文件可以使用脚本即时创建,但最终必须是来自 Google 驱动器的文件。

function test() {
  
  let myHeaders = {'Authorization': 'Bearer ...'};
  let fileBlob = Utilities.newBlob('Hello!', 'text/plain', 'TestFile.txt');
  let formdata = {'file': fileBlob,
                  'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
                  'pinataOptions': {'cidVersion': 0}};

  let requestOptions = {
    method: 'post',
    headers: myHeaders,
    papyload: formdata,
    muteHttpExceptions: true
  };

  let url = "https://api.pinata.cloud/pinning/pinFileToIPFS";

  let response = UrlFetchApp.fetch(url, requestOptions);
  let responeText = JSON.parse(response.getContentText());

  Logger.log(responeText);
}

如果您的Bearer ...访问令牌是使用API的有效值,那么下面的修改怎么样?从the official document,我认为在你的formdata的情况下,pinataMetadatapinataOptions的值可能需要是字符串类型。

发件人:

let formdata = {'file': fileBlob,
                'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
                'pinataOptions': {'cidVersion': 0}};

收件人:

let formdata = {
  'file': fileBlob,
  'pinataMetadata': JSON.stringify({ 'name': 'TestFileNewName.txt', 'keyvalues': { 'MetaData1': 'Test1', 'MetaData2': 'Test2' } }),
  'pinataOptions': JSON.stringify({ 'cidVersion': 0 })
};

另外,请将papyload: formdata,修改为payload: formdata, 已经提到了这一点 大师点评.

参考文献: