Ipfs

IPFS 文件下載

  • June 1, 2021

我想檢查是否有任何方法可以在不執行本地惡魔的情況下下載 IPFS 文件。我正在開發一個 Dapp,我將通過 IPFS 上傳文件並將其連結發送給相應的團隊。我希望那個團隊下載文件。

您可以在 DApp 中添加 npm 庫“ipfs”。

https://www.npmjs.com/package/ipfs

庫/ipfs.js

const IPFS = require('ipfs');
const node = new IPFS();

/**
* Function that uploads file onto IPFS
* @param {JSON} fileDetails Json containing file details that needs to be 
  updated on IPFS
* @param {function} callback callback function
*/
const uploadFileToIPFS = function(fileDetails, callback) {
   let fileContent = fs.readFileSync(fileDetails.path);
   node.files.add({
       path: fileDetails.originalname,
       content: fileContent
   }, (err, filesAdded) => {
       if (err) {
           return callback(err);
       }
       callback(null, {
           hash: filesAdded[0].hash
       });
   });
};


/**
* Function that gets the document contents from IPFS, based on the document's hash
* @param {String} ipfsHash IPFS hash of the document that is being uploaded onto IPFS
* @param {function} callback callback function
*/
const getFileContentsFromIPFS = function(ipfsHash, callback) {
   node.files.cat(ipfsHash, function(err, data) {
       callback(err, data);
   });
};

路線/ipfs.js

// API that gets the documents from IPFS
router.get('/api/to/get/document/from/ipfs', function(req, res){
   ipfs.getFileContentsFromIPFS(req.query.ipfsHash, function(err, result){
       if (err) {
           res.json({
               status: 'error',
               message: 'Something went wrong while fetching document from IPFS'
           });
       } else {
           //Get the file type
           let isImageOrPdf = fileType(result);
           if (isImageOrPdf.ext == 'pdf') {
               res.writeHead(200,{
                   'Content-type': 'application/pdf'
               });
               res.end(result);
           } else if(isImageOrPdf.ext == 'png' || isImageOrPdf.ext == 'jpg' ){
               res.writeHead(200, {'Content-Type' : 'image/png'});
               res.end(result);
           }
       }
   });
});

而不是發送連結,而是發送文件的 ipfsHash,每當他們想要下載文件時,獲取 ipfsHash 並點擊上面的 API,該文件就會被下載。

試試 http 網關Cloudflare IPFS 網關 - IPFS 新聞

引用自:https://ethereum.stackexchange.com/questions/57659