Piszę ten skrypt węzła, aby przesłać obrazy do wiadra s3. Jak na razie dobrze, poza faktem, że obrazy, które są ładowane do wiadra, mają rozmiar 0 KB. Oznacza to, że mogę zobaczyć ich nazwiska, ale na zdjęciach nie ma treści. Czy ktoś mógłby mi wyjaśnić, dlaczego tak się dzieje?
Oto mój kod:
const fs = require('fs');
const AWS = require('aws-sdk');
const config = require('./config');
//configuring the AWS environment
var s3 = new AWS.S3({
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey
});
const uploadFile = (fileName) => {
// Setting up S3 upload parameters
const params = {
Bucket: 'mybucket',
Key: fileName, // File name you want to save as in S3
Body: fs.readFileSync(fileName)
};
// Uploading files to the bucket
s3.upload(params, function(err, data) {
if (err) {
throw err;
}
console.log(`File uploaded successfully. ${data.Location}`);
});
};
uploadFile("car.png");
uploadFile("aeroplane.png");
uploadFile("sky.png");
Doceniam każdą pomoc, ponieważ naprawdę nie rozumiem, co może być nie tak!
2 odpowiedzi
Czytanie pliku jako strumienia przy użyciu createReadStream
działa dla mnie.
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'REGION'});
// Create S3 service object
const s3 = new AWS.S3({apiVersion: '2006-03-01'});
// Configure the file stream and obtain the upload parameters
const fs = require('fs');
var fileStream = fs.createReadStream('/file/path');
fileStream.on('error', function(err) {
console.log('File Error', err);
});
var uploadParams = {
Bucket: 'bucket-name',
Key: 'key',
Body: fileStream
};
s3.upload (uploadParams, function (err, data) {
if (err) {
console.log("Error", err);
} if (data) {
console.log("Upload Success", data.Location);
}
});
Nawiasem mówiąc, twój kod działa idealnie dla wielu plików. Skopiowałem trzy pliki graficzne w tym samym katalogu i uruchomiłem twój kod. Wszystkie pliki są kopiowane do S3 bez zmian. Żaden z nich nie ma zerowych bajtów.
Podobne pytania
Nowe pytania
node.js
Node.js to oparte na zdarzeniach, nieblokujące, asynchroniczne środowisko wykonawcze we / wy, które korzysta z silnika JavaScript V8 firmy Google i biblioteki libuv. Służy do tworzenia aplikacji, które w dużym stopniu wykorzystują możliwość uruchamiania JavaScript zarówno po stronie klienta, jak i po stronie serwera, a zatem korzystają z możliwości ponownego wykorzystania kodu i braku przełączania kontekstów.