2017-12-04 1 views
1

단일 업로드 작업

function uploadGuideMedia(req, res, next) { 
 
    if (!req.file && !req.body.id) { 
 
     return res.status(401).send({ 
 
      status: 401, 
 
      data: "Upload a file with 'file' key" 
 
     }); 
 
    } 
 
    db.query('SELECT * from guide_media where _id = $1', [req.body.id], function(err, guide) { 
 
     if (err) return next(err); 
 
     if (guide.rows.length == 0) { 
 
      return res.status(404).send({ 
 
       status: 404, 
 
       data: "Guide_media not found" 
 
      }) 
 
     } else { 
 
      let name = req.file.path + path.extname(req.file.originalname); 
 
      fs.renameSync(req.file.path, name); 
 
      req.file.path = name; 
 
      var s3bucket = new AWS.S3({ 
 
       params: { 
 
        Bucket: 'mapery-v2' 
 
       } 
 
      }); 
 
      fs.readFile(req.file.path, function(err, lq_file) { 
 
       s3bucket.createBucket(function() { 
 
        var params = { 
 
         Key: 'upload-v2/' + req.file.originalname, 
 
         Body: lq_file, 
 
         ContentType: req.file.mimetype, 
 
         ACL: 'public-read' 
 
        }; 
 
        s3bucket.upload(params, function(err, aws_images) { 
 
         fs.unlink(req.file.path, function(err) { 
 
          db.query('UPDATE guide_media SET image_path = $1 WHERE _id = $2 RETURNING *', [aws_images.Location, req.body.id], function(err, guide_res) { 
 
           if (err) return next(err); 
 
           return res.status(200).send({ 
 
            status: 'success', 
 
            data: guide_res.rows 
 
           }); 
 
          }); 
 
         }); 
 
        }) 
 
       }) 
 
      }) 
 
     } 
 
    }); 
 
}
내가 단, AWS 비디오 파일을 업로드하려고 오전에 AWS에 5메가바이트보다 큰 크기의 파일을 업로드하는 방법 파일의 크기는 5메가바이트가 업로드되어보다 큰 경우 (5 메가 바이트는 2 개, 10 메가 바이트는 3 개). 그러나이 https://aws.amazon.com/s3/faqs/#How_much_data_can_I_store에서 그들은 단일 업로드 작업에서 최대 5GB를 업로드 할 수 있다고 말했습니다. 내가 틀렸어?

+0

안정성 및 속도 AWS는 기본적으로 최대 업로드를 지정하지 않으면 멀티 파트 업로드를 사용합니다. 5MB의 청크가 필요합니다. 1go로 업로드하려면 max-uploads를 1로 설정해야합니다. – jarnohenneman

+0

답변 해 주셔서 감사합니다. 'params' 변수에이를 지정해야합니까 ?? –

답변

0

파트로 업로드한다고해서 파일이 여러 부분으로 S3에 저장되는 것은 아닙니다. 페이로드가 충분히 크면 SDK가 파일을 여러 부분에 동시에 업로드하여 업로드가 실패 할 경우 업로드를 부분적으로 다시 시도 할 수 있습니다. 기본적으로 SDK는 5MB의 partSize를 사용합니다. 다음 코드를 사용하여 partSize를 10MB로 설정할 수 있습니다.

var params = {Bucket: 'bucket', Key: 'key', Body: stream}; 
var options = {partSize: 10 * 1024 * 1024, queueSize: 1}; 
s3.upload(params, options, function(err, data) { 
    console.log(err, data); 
}); 

편집 : 업로드 방법에 대한 문서에 링크. http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

+0

감사합니다. 부품 크기를 조금 더 늘릴 수 있습니까 ?? –

+0

고마워. –

+0

partSize를 1GB로 변경했고 30MB 파일을 업로드하려고했지만 작동하지 않는다. –