Refactored code
This commit is contained in:
parent
59bda5d12b
commit
44b8f4a924
@ -1,17 +1,13 @@
|
|||||||
import { create } from 'ipfs';
|
|
||||||
import { writeFile } from 'fs/promises';
|
import { writeFile } from 'fs/promises';
|
||||||
import { fileTypeFromBuffer } from 'file-type';
|
import { fileTypeFromBuffer } from 'file-type';
|
||||||
|
import IPFSManager from './IPFSManager.js';
|
||||||
|
|
||||||
class IPFSFileManager {
|
export default class IPFSFileRetriever extends IPFSManager {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
super();
|
||||||
this.node = null;
|
this.node = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async initIPFS() {
|
|
||||||
this.node = await create();
|
|
||||||
console.log('IPFS node is ready');
|
|
||||||
}
|
|
||||||
|
|
||||||
async retrieveFileFromIPFS(cid, filepath) {
|
async retrieveFileFromIPFS(cid, filepath) {
|
||||||
try {
|
try {
|
||||||
await this.initIPFS();
|
await this.initIPFS();
|
||||||
@ -23,7 +19,7 @@ class IPFSFileManager {
|
|||||||
const fileData = Buffer.concat(chunks);
|
const fileData = Buffer.concat(chunks);
|
||||||
|
|
||||||
// Determine the file extension based on the MIME type
|
// Determine the file extension based on the MIME type
|
||||||
const { mime } = await this.getfileTypeFromFile(fileData);
|
const mime = await this.getFileTypeFromFile(fileData);
|
||||||
const fileExtension = this.getFileExtension(mime);
|
const fileExtension = this.getFileExtension(mime);
|
||||||
|
|
||||||
// Save the file data to a local file with the appropriate extension
|
// Save the file data to a local file with the appropriate extension
|
||||||
@ -47,7 +43,7 @@ class IPFSFileManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getfileTypeFromFile(fileData) {
|
async getFileTypeFromFile(fileData) {
|
||||||
try {
|
try {
|
||||||
return fileTypeFromBuffer(fileData);
|
return fileTypeFromBuffer(fileData);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -69,16 +65,4 @@ class IPFSFileManager {
|
|||||||
// Return the corresponding extension if available, otherwise fallback to 'dat'
|
// Return the corresponding extension if available, otherwise fallback to 'dat'
|
||||||
return extensionMap[mimeType] || 'dat';
|
return extensionMap[mimeType] || 'dat';
|
||||||
}
|
}
|
||||||
|
|
||||||
async closeIPFS() {
|
|
||||||
if (this.node) {
|
|
||||||
await this.node.stop();
|
|
||||||
console.log('IPFS node connection closed');
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const cid = 'QmZ6h18zefo1DEEN5QC3WberbAFAkhvKmhEF6eJou6TC3h'; // Replace with the CID of the file you want to retrieve
|
|
||||||
const filepath = './retrievedFile'; // Specify the file path without the extension
|
|
||||||
const ipfsFileManager = new IPFSFileManager();
|
|
||||||
ipfsFileManager.retrieveFileFromIPFS(cid, filepath);
|
|
31
IPFSFileUploader.js
Normal file
31
IPFSFileUploader.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { readFile } from 'fs/promises';
|
||||||
|
import IPFSManager from './IPFSManager.js';
|
||||||
|
|
||||||
|
export default class IPFSFileUploader extends IPFSManager {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.node = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async uploadFileToIPFS(filePath) {
|
||||||
|
try {
|
||||||
|
await this.initIPFS();
|
||||||
|
const fileData = await this.readFile(filePath);
|
||||||
|
const results = await this.node.add({ content: fileData });
|
||||||
|
const cid = results.cid.toString();
|
||||||
|
console.log('File uploaded to IPFS with CID:', cid);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to upload the file to IPFS', error);
|
||||||
|
} finally {
|
||||||
|
this.closeIPFS();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async readFile(filePath) {
|
||||||
|
try {
|
||||||
|
return await readFile(filePath);
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(`Failed to read the file: ${error}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
IPFSManager.js
Normal file
15
IPFSManager.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { create } from 'ipfs';
|
||||||
|
|
||||||
|
export default class IPFSManager {
|
||||||
|
async initIPFS() {
|
||||||
|
this.node = await create();
|
||||||
|
console.log('IPFS node is ready');
|
||||||
|
}
|
||||||
|
|
||||||
|
async closeIPFS() {
|
||||||
|
if (this.node) {
|
||||||
|
await this.node.stop();
|
||||||
|
console.log('IPFS node connection closed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
index.js
Normal file
13
index.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import IPFSFileUploader from './IPFSFileUploader.js';
|
||||||
|
import IPFSFileRetriever from './IPFSFileRetriever.js';
|
||||||
|
|
||||||
|
// const filePath = './file.dat';
|
||||||
|
// const ipfsFileUploader = new IPFSFileUploader();
|
||||||
|
// const cid = ipfsFileUploader.uploadFileToIPFS(filePath);
|
||||||
|
|
||||||
|
// console.log(cid)
|
||||||
|
|
||||||
|
const cid = "QmP5DGmXZBrnvL2mgEUTwtccbupfKhTbwDjFMtmWAj7CLN";
|
||||||
|
const ipfsFileRetriever = new IPFSFileRetriever();
|
||||||
|
ipfsFileRetriever.retrieveFileFromIPFS(cid, './data');
|
||||||
|
|
46
send.js
46
send.js
@ -1,46 +0,0 @@
|
|||||||
import { create } from 'ipfs';
|
|
||||||
import { readFile } from 'fs/promises';
|
|
||||||
|
|
||||||
class IPFSFileManager {
|
|
||||||
constructor() {
|
|
||||||
this.node = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
async initIPFS() {
|
|
||||||
this.node = await create();
|
|
||||||
console.log('IPFS node is ready');
|
|
||||||
}
|
|
||||||
|
|
||||||
async addFileToIPFS(filePath) {
|
|
||||||
try {
|
|
||||||
await this.initIPFS();
|
|
||||||
const fileData = await this.readFile(filePath);
|
|
||||||
const results = await this.node.add({ content: fileData });
|
|
||||||
const cid = results.cid.toString();
|
|
||||||
console.log('File added to IPFS with CID:', cid);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Failed to add the file to IPFS', error);
|
|
||||||
} finally {
|
|
||||||
this.closeIPFS();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async readFile(filePath) {
|
|
||||||
try {
|
|
||||||
return await readFile(filePath);
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(`Failed to read the file: ${error}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async closeIPFS() {
|
|
||||||
if (this.node) {
|
|
||||||
await this.node.stop();
|
|
||||||
console.log('IPFS node connection closed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const filePath = './image.jpg';
|
|
||||||
const ipfsFileManager = new IPFSFileManager();
|
|
||||||
ipfsFileManager.addFileToIPFS(filePath);
|
|
Loading…
Reference in New Issue
Block a user