Неполная копия файла с NodeJS на Amazon S3 с - PullRequest
0 голосов
/ 01 ноября 2018

Из соображений надежности я перенесу некоторые изображения из внешнего источника в хранилище Amazon S3.

Однако изображения обрезаются и выглядят как на изображении ниже.
Код, который я использую, имеет следующую логику:

const request = require('request');
let r = request(pictureUrl);
r.on('response', function(rs){
  let newFileName = new Date().getTime() + '_' + externalId+'.jpg';
  let localPath = __dirname+'/../../temp_files/'+newFileName+'';
  let ws = fs.createWriteStream(localPath);
  rs.pipe(ws);
  rs.on('end', function(){
    fs.readFile(localPath, (error, fileContent) => {
      uploadToS3(fileContent, newFileName, 'profile_pics', function (err, response) {
        fs.unlink(localPath, (err) => {

           /* send response to browser */

То, что я считаю причиной этого, является одним из следующих:
1. r.on('response' <- файл еще не получен и запускаются следующие процессы. <br> 2. rs.on('end' <- файл еще не записан локально и запускаются следующие процессы. <br> 3. fs.unlink(localPath <- выполняется до завершения <code>uploadToS3(fileContent.

Мнения

'Incomplete image copy'

1 Ответ

0 голосов
/ 03 ноября 2018

Вы должны загрузить свой файл на S3 в обратном вызове для события finish потока с возможностью записи.

ws.on('finish', function(){
    fs.readFile(localPath, (error, fileContent) => {
      uploadToS3(fileContent, newFileName, 'profile_pics', function (err, response) {
...

Вы правы относительно предположения № 2

  1. rs.on ('end' <- файл еще не записан локально и запускаются следующие процессы. </li>

Другие предположения неверны.

  1. r.on ('response' <- файл еще не получен и запускаются следующие процессы. </li>

# 1 не имеет значения. Несколько обратных вызовов должны быть в состоянии работать параллельно.

  1. fs.unlink (localPath <- выполняется до uploadToS3 (fileContent завершен. </li>

# 3, вероятно, неправильно. Я не уверен, что uploadToS3 делает, но, вероятно, он вызывает обратный вызов, когда загрузка завершена, поэтому файл unlinked после этого

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