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
});
});
});
})
})
})
}
});
}
답변
파트로 업로드한다고해서 파일이 여러 부분으로 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
감사합니다. 부품 크기를 조금 더 늘릴 수 있습니까 ?? –
고마워. –
partSize를 1GB로 변경했고 30MB 파일을 업로드하려고했지만 작동하지 않는다. –
안정성 및 속도 AWS는 기본적으로 최대 업로드를 지정하지 않으면 멀티 파트 업로드를 사용합니다. 5MB의 청크가 필요합니다. 1go로 업로드하려면 max-uploads를 1로 설정해야합니다. – jarnohenneman
답변 해 주셔서 감사합니다. 'params' 변수에이를 지정해야합니까 ?? –