首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pinFileToIPFS API调用S3文件URL

pinFileToIPFS API调用S3文件URL
EN

Stack Overflow用户
提问于 2021-07-13 07:38:01
回答 1查看 257关注 0票数 1

我的文件是图像链接或任何其他文件链接。我想打电话给皮纳塔pinFileToIpfs API (文档)。

根据文档,我必须通过本地文件的路径来追加。但我有AWS网址。如何仍然调用下面的API?

代码语言:javascript
复制
let data = new FormData();
data.append('file', fs.createReadStream('./yourfile.png'));

注意:我也试过这个

代码语言:javascript
复制
 data.append('file', s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream());

但没能成功。

EN

回答 1

Stack Overflow用户

发布于 2022-02-24 22:19:11

我在这上面花了三天时间,终于开始工作了。诀窍是,您将有一个困难的时间POSTing一个流直接到Pinata,因为它需要一个文件。最后,我放弃了,把来自S3的流保存到服务器上的一个临时文件中,然后发送到Pinata,然后删除临时文件。这是可行的。

代码语言:javascript
复制
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 { }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68358321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档