如何将文件从浏览器发送到远程IPFS网关

时间:2017-07-07 13:09:57

标签: ipfs

我有一个输入字段,它调用_getFile函数

<input type="file" class="file" on-change="_getFile"/>

获取文件

_getFile(event) {
  this.loading = true;
  const file = event.target.files[0];
  let reader = new window.FileReader()
  reader.onloadend = () => this._saveToIpfs(reader)
  reader.readAsArrayBuffer(file)
 }
}

一旦我们有一个数组缓冲区,我们就会调用...

_saveToIpfs(data){

}

这是我需要帮助的,我想将所选文件发送给&#39; https://ipfs.infura.io:5001/api/v0/add&#39;或者&#39; https://ipfs.io/api/v0/add&#39;怎么做?这是一个xhr帖子吗?我希望得到一个IPFS哈希

以下简单表格似乎上传文件,然后与错误ERR_CONTENT_LENGTH_MISMATCH断开连接

<form action="https://ipfs.io/api/v0/add/" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

我试过经典的XHR

_getFile(event) {
const file = event.target.files[0];
var data = new FormData();
data.append('path', event.target.files[0]);
var request = new XMLHttpRequest();
request.onreadystatechange = function(){
    if(request.readyState == 4){
        console.log(request.response)
    }
};
request.open('POST', 'https://ipfs.io/api/v0/add');
request.send(data);
}

再次使用ERR_CONTENT_LENGTH_MISMATCH

2 个答案:

答案 0 :(得分:1)

您可以使用官方的here库。然后,您可以使用js-ipfs-api函数发布文件,因为您已经将其保存在数组缓冲区中。如果那不起作用,则js-ipfs-api具有您可以使用的内置Buffer对象。

答案 1 :(得分:0)

您应该使用Gateway API而不是Node API。只需将文件发布到它,您就会得到一个哈希值。

有关示例,请参阅IPFessay does it