#node.js #reactjs #amazon-s3 #ipfs
Вопрос:
Я пытаюсь отправить файл, хранящийся в облаке aws S3, в ipfs с помощью Pinata. Но когда я вызываю следующую функцию, я получаю ошибку «Не удается прочитать свойство «Поток » неопределенный»». Я очень старался, но не мог найти решение. Я новичок в reactjs и nodejs, буду очень признателен, если кто-нибудь сможет помочь.
:
const s3Stream = s3.getObject({
Bucket: s3Bucket,
Key: fileName
})
.createReadStream()
Вся функция:
const AWS = require('aws-sdk');
const axios = require('axios');
const FormData = require('form-data');
const s3AccessKeyId = process.env.REACT_APP_ID;
const s3AccessSecret = process.env.REACT_APP_SECRET;
const s3Region = process.env.REACT_APP_REGION;
const s3Bucket = process.env.REACT_APP_BUCKET_NAME;
const apiKey = process.env.REACT_APP_PINATA_KEY;
const apiSecret = process.env.REACT_APP_PINATA_SECRET;
var form = new FormData();
const fileName = filename;
const url = 'https://api.pinata.cloud/pinning/pinFileToIPFS';
const s3 = new AWS.S3({
credentials: {
accessKeyId: s3AccessKeyId,
secretAccessKey: s3AccessSecret,
region: s3Region
}
});
const s3Stream = s3.getObject({
Bucket: s3Bucket,
Key: fileName
})
.createReadStream()
.catch(error => {
console.log(error);
});
form.append('file', s3Stream, {
filename: fileName //required or it fails
});
var config = {
method: 'post',
url: url,
'maxBodyLength': Infinity,
headers: {
'pinata_api_key': apiKey,
'pinata_secret_api_key': apiSecret,
...form.getHeaders()
},
data: form
};
axios(config)
.then(function (response) {
return { sucess: true, data: JSON.stringify(response.data) };
})
.catch(function (error) {
return { sucess: false, data: JSON.stringify(error) };
});