2015-05-10 3 views
0

Проблема с загрузкой изображений Открывает узел/express/multer для AWS. Консоль сообщает мне, что есть несколько загрузок одного и того же изображения, и полученный файл на AWS усечен и сломан. Я взял всю клиентскую сторону ajax и просто использую стандартную загрузку формы. Экспресс 3.2.5. Спасибо за любые идеи.узел multer AWS одиночный файл многократная загрузка

Выход консоли:

in FileUploadData 
in FileUploadData 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 
in FileUploadData 
in FileUploadData 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 
in FileUploadData 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 
in FileUploadData 
in no req.files 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 
in s3.put 
Successfully uploaded data to myBucket/myKey atest.jpg 

Это не соответствует, но всегда несколько триггеров FileUploadData. Код узла, вырезанный и вставленный из потока stackoverflow.

app.use(multer({ 
    limits : { fileSize:100000 }, 
    rename: function (fieldname, filename) { 
     return filename.replace(/\W+/g, '-').toLowerCase(); 
    }, 
    onFileUploadData: function (file, data, req, res) { 
    // file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer } 
     console.log("in FileUploadData"); 
     var params = { 
      Bucket: 'your20images', 
      Key: file.name, 
      Body: data, 
      ContentType: 'image/jpeg' 

     }; 
     s3.putObject(params, function (perr, pres) { 
      console.log("in s3.put"); 
      if (perr) { 
       console.log("Error uploading data: ", perr); 
      } else { 
       console.log("Successfully uploaded data to myBucket/myKey "+file.name); 
      } 
     }); 
    } 
})); 

Клиентская форма

<form method="post" enctype="multipart/form-data" action="/upload" id="upform"> 
    <input type="file" name="imgupload"><br /><br /><input type="submit"> 
</form> 

--------------------- редактировать ---------- ------------------

Несколько протоколов консоли объяснены в принятом ниже ответе. Предварительное решение, которое я нашел, отправляется в AWS в onFileUploadComplete. Подозреваю, что есть лучший способ, но если кто-то добирается до этого, он работал для меня.

onFileUploadComplete: function (file, data, req, res) { 
     console.log("complete"); 
     fs.readFile(data.files.imgupload[0].path, function(err, data){ 
     if(err) { console.log("image rename error: "+err) } 
     var params = { 
      Bucket: 'myBucket', 
      Key: file.name, 
      Body: data, 
      ContentType: 'image/jpeg' 
     }; 
     s3.putObject(params, function (err, res) { 
      if (err) { 
       console.log("Error uploading data: ", err); 
      } else { 
       console.log("Successfully uploaded data to myBucket/myKey"); 
      } 
     }); 
    }); 
} 

ответ

2

Как documentation упоминает, onFileUploadData вызывается для каждого фрагмента каждого файла. Поэтому его можно было бы легко вызвать несколько раз для одного и того же файла.

+0

Спасибо, что имеет смысл. Так что я догадываюсь, что происходит, когда куски переписывают друг друга на AWS. Попытка поставить загрузку в onFileUploadComplete, но пока не удается. Будет отмечен как ответ после загрузки. – openquestions