使用Google Apps Script向IPFS节点上传文件报错如何解决?
问题原因
- 拼写错误:
requestOptions中的参数名papyload拼写错误,正确参数名为payload - Google Apps Script 的
UrlFetchApp不支持直接传递嵌套对象作为表单数据,Pinata 接口要求pinataMetadata、pinataOptions两个参数必须以 JSON 字符串格式提交 - 你当前的 payload 构造方式不符合 multipart/form-data 的提交要求,GAS 处理带 Blob 的表单提交时会自动生成带正确 boundary 的请求头,无需手动指定 Content-Type
修正后的测试代码
function test() { let myHeaders = {'Authorization': 'Bearer 替换为你的Pinata有效密钥'}; let fileBlob = Utilities.newBlob('Hello!', 'text/plain', 'TestFile.txt'); let formdata = { 'file': fileBlob, 'pinataMetadata': JSON.stringify({'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}}), 'pinataOptions': JSON.stringify({'cidVersion': 0}) }; let requestOptions = { method: 'post', headers: myHeaders, payload: 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); }
谷歌云端硬盘文件上传替换方法
测试通过后,将生成测试 Blob 的逻辑替换为如下代码即可读取 Drive 内文件上传:
// 替换为你需要上传的谷歌云端硬盘文件ID const targetFileId = "替换为实际文件ID"; const fileBlob = DriveApp.getFileById(targetFileId).getBlob();
内容的提问来源于stack exchange,提问作者gabriel7
相关产品推荐
相关产品推荐

