Почему файл, созданный из потока S3, пуст? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь получить доступ к файлу в приватной корзине S3 с помощью лямбда-функции, определенной Cognito.

  • Чтение потока работает вне лямбды , но не внутри лямбды
  • Создание предварительно подписанного URL-адреса работает внутри лямбды
  • Ожидание, когда содержимое будет готово, поскольку строка работает внутри лямбды

Мне удалосьчтобы получить предварительно подписанный URL для загрузки файла.Используя те же параметры, я попытался записать поток чтения в локальный файл.Файл создается, но он пуст.Я не смог уловить ни одной ошибки в процессе.

const s3 = new AWS.S3({ apiVersion: 'latest' });
const file = 's3Filename.csv'
const userId = event.requestContext.identity.cognitoIdentityId;
const s3Params = {
    Bucket: 'MY_BUCKET',
    Key: `private/${userId}/${file}`, 
};

var fileStream = require('fs').createWriteStream('/path/to/my/file.csv'); 
var s3Stream = s3.getObject(s3Params).createReadStream();

// Try to print s3 stream errors
s3Stream
.on('error', function (err) {
    console.error(err); // prints nothing
});

// Try to print fs errors
s3Stream
.pipe(fileStream)
.on('error', function (err) {
    console.error('File Stream:', err); // prints nothing
})
.on('data', function (chunk) {
    console.log(chunk); // prints nothing
})
.on('end', function () {
    console.log('All the data in the file has been read'); // prints nothing
})
.on('close', function (err) {
    console.log('Stream has been Closed'); // prints nothing
});

Я совершенно уверен, что мои параметры верны, потому что я могу получить предварительно подписанный URL-адрес, который позволяет мне загрузить файл.

console.log(s3.getSignedUrl('getObject', s3Params));

Я также могу прочитать содержимое файла, используя getObject().promise().Это может сработать, но я разбираю CSV-файл, и я предпочитаю немного разбираться в памяти и анализировать поток.

try 
{
    const s3Response = await s3.getObject(s3Params).promise();
    let objectData = s3Response.Body.toString('utf-8'); 
    console.log(objectData);
}
catch (ex) 
{
    console.error(ex);
}

Почему файл, созданный из потока S3, пуст?И почему ничего не печатается?

Может ли это быть проблемой политики доступа?Если это так, почему я не получил ошибку при выполнении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...