如何从.net中的IPFS使用ipfs核心api下载pdf文件?

时间:2018-10-13 19:26:36

标签: ipfs

最近,我正在尝试将文件上传到IPFS并使用ipfs核心api下载/检索它。为此,请使用.net库ipfs(c#) library。它对于txt文件效果很好,但是当我上传pdf文件并尝试下载时,它给了我某种string.i以为该字符串可能是我的pdf文件的所有内容,但该字符串证明我错了。当我尝试将原始pdf文件字符串与(完全不同)的(当前字符串)进行比较时。

我的pdf文件哈希: QmWPCRv8jBfr9sDjKuB5sxpVzXhMycZzwqxifrZZdQ6K9o

和我的C#代码获取this(api)==>

        static void Main(string[] args)
    {
        var ipfs = new IpfsClient();

        const string filename = "QmWPCRv8jBfr9sDjKuB5sxpVzXhMycZzwqxifrZZdQ6K9o";
        var text = ipfs.FileSystem.ReadAllTextAsync(filename).Result;
    }

我的问题是我做错了,我做错了什么,那我怎么能得到一个pdf文件呢?怎么样??

1 个答案:

答案 0 :(得分:0)

首先,请检查您是否可以从实时环境访问文件: 例如

  

https://ipfs.infura.io/ipfs/QmNtg1uDy1A71udMa2ipTfKghArRQFspfFkncunamW29SA

     

https://ipfs.io/ipfs/

如果文件已正确上传,则可以使用IpfsClient软件包执行此操作:

  1. 定义在ipfs env上引用的属性(例如,通过infura)

    _ipfsClient = new IpfsClient("https://ipfs.infura.io:5001");

  2. 介绍通过散列下载文件的方法

    public async Task<byte[]> DownloadAsync(string hash) 
    {
        using (var stream = await _ipfsClient.FileSystem.ReadFileAsync(hash))
        {
            using (var ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                return ms.ToArray();
            }
        }
    }
  1. 如果您使用Web api-引入控制器以完全返回pdf
    public async Task<IActionResult> Get(string hash)
    {
        var data = await _ipfsDownloadService.DownloadAsync(hash);
        return File(data, "application/pdf");
    }