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!

0
hispaniccoder 5 grudzień 2019, 14:49

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);
  }
});

Referencja: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-creating-buckets.html#s3-example-creating-buckets- prześlij-plik

0
Arun K 5 grudzień 2019, 15:35
Czy próbowałeś tego na jednym lub wielu plikach?
 – 
hispaniccoder
5 grudzień 2019, 15:35
Mam zakodowaną jedną nazwę pliku i wykonałem. próbowałem z dwoma plikami
 – 
Arun K
5 grudzień 2019, 15:37
U mnie działa dobrze z jednym plikiem. jednak gdy próbuję przesłać wiele plików, pojawia się błąd
 – 
hispaniccoder
5 grudzień 2019, 15:38
Wiele plików jednocześnie? , jak się masz?
 – 
Arun K
5 grudzień 2019, 15:45
Rozumiem, spróbuj użyć obietnicy, aby zrobić to sekwencyjnie
 – 
Arun K
5 grudzień 2019, 15:48

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.

0
Arun K 5 grudzień 2019, 16:04
Myślę, że masz problemy z uprawnieniami systemu plików, gdy próbujesz uzyskać dostęp do trzech plików z tego samego katalogu. aby to potwierdzić, spróbuj przenieść pliki do oddzielnych katalogów i uruchom swój kod.
 – 
Arun K
5 grudzień 2019, 16:04
Przy okazji przetestowałem Twój kod na komputerze Mac
 – 
Arun K
5 grudzień 2019, 16:06