我的文件是图像链接或任何其他文件链接。我想打电话给皮纳塔pinFileToIpfs API (文档)。
根据文档,我必须通过本地文件的路径来追加。但我有AWS网址。如何仍然调用下面的API?
let data = new FormData();
data.append('file', fs.createReadStream('./yourfile.png'));注意:我也试过这个
data.append('file', s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream());但没能成功。
发布于 2022-02-24 22:19:11
我在这上面花了三天时间,终于开始工作了。诀窍是,您将有一个困难的时间POSTing一个流直接到Pinata,因为它需要一个文件。最后,我放弃了,把来自S3的流保存到服务器上的一个临时文件中,然后发送到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 { }https://stackoverflow.com/questions/68358321
复制相似问题