javascript - pinFileToIPFS API 调用 S3 文件 URL
问题描述
我的文件是图片链接或任何其他文件链接。我试图调用pinata pinFileToIpfs API(文档)。
根据documentaion,我必须传递本地文件的路径才能追加。但我有 AWS URL。如何仍然调用下面的 API?
let data = new FormData();
data.append('file', fs.createReadStream('./yourfile.png'));
注意:我也试过这个
data.append('file', s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream());
但它没有成功。
解决方案
我花了 3 天的时间,终于让它工作了。诀窍是您将很难将 Stream 直接发布到 Pinata API,因为它需要一个文件。我最终放弃了,把来自 S3 的 Stream 保存到服务器上的一个临时文件中,然后发送给 Pinata,然后删除了临时文件。这样可行。
try
{
//Copy file from S3 to IPFS
AmazonS3.AmazonS3Utility m = new AmazonS3.AmazonS3Utility();
Stream myfile = m.GetObjectStream(fileName);
using (var client = new RestClient("https://api.pinata.cloud"))
{
//Add IPFS Metadata
JObject pinataOptions = new JObject(
new JProperty("cidVersion", "0")
);
string pO = JsonConvert.SerializeObject(pinataOptions, Formatting.Indented);
JObject pinataMetadata = new JObject(
new JProperty("name", fileName),
new JProperty("keyvalues",
new JObject(
new JProperty("file_url", FileUrl),
new JProperty("description", "")
)
));
string pM = JsonConvert.SerializeObject(pinataMetadata, Formatting.Indented);
string tempFile = AppDomain.CurrentDomain.BaseDirectory + @"temp\\" + fileName;
long fileLength;
using (FileStream outputFileStream = new FileStream(tempFile, FileMode.Create))
{
myfile.CopyTo(outputFileStream);
fileLength = outputFileStream.Length;
}
var request = new RestRequest("/pinning/pinFileToIPFS", Method.Post);
request.AddQueryParameter("pinata_api_key", your_APIKey);
request.AddQueryParameter("pinata_secret_api_key", your_SecretAPIKey);
request.AddParameter("pinataOptions", pO);
request.AddParameter("pinataMetadata", pM);
request.AddHeader("Authorization", your_Pinata_JWT);
request.AddFile("file", tempFile, fileName);
RestResponse response = await client.ExecutePostAsync(request);
File.Delete(tempFile);
return response.Content;
}
}
catch { }
推荐阅读
- regex - 正则表达式:更改 html 页面中的所有文本内容,但不更改属性中的文本
- mysql - 带有多个and子句的Mysql查询的执行顺序是什么?
- java - 如何限制 ListView 项上显示的字符数
- excel - 我开发的 vba 代码有问题
- wso2 - 使用自定义索赔处理程序的 WSO2 索赔扩展
- php - PHP Excel 禁用单元格..设置受保护
- ios - iOS IAP 用于有限购买数量的商品。消耗还是不消耗?
- eclipse - TestNG 与 eclipse 2019-09 不兼容
- c# - 如何使用 ICsharpCode.TextEditor 组件自动完成标签?
- typescript - 如何将 react javascript 转换为类型脚本?