내 s3 버킷에 대해 미리 서명 된 URL을 생성하려고합니다. 그 후 브라우저에 생성 된 URL을 복사하여 붙여 넣으면이 오류가 발생합니다.
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>xx</Key>
<RequestId>xx</RequestId>
<HostId>xx</HostId>
</Error>
내 코드 :
const aws = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');
const dotenv = require('dotenv');
dotenv.config();
let region = 'us-east-1';
aws.config.update({
secretAccessKey: process.env.SECRET_ACCESS_KEY,
accessKeyId: process.env.ACCESS_KEY_ID,
region: region,
signatureVersion: 'v4'
});
var s3 = new aws.S3({
region:region
});
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true);
} else {
cb(new Error('Invalid file type, only JPEG and PNG is allowed!'), false);
}
};
let bucketName = 'somebucketname123';
const signedUrlExpireSeconds = 60 * 5;
const url = s3.getSignedUrl('getObject', {
Bucket: bucketName,
Key: process.env.SECRET_ACCESS_KEY,
Expires: signedUrlExpireSeconds
})
console.log('url', url);
const upload = multer({
fileFilter: fileFilter,
storage: multerS3({
acl: 'public-read',
s3,
bucket: bucketName,
key: function(req, file, cb) {
req.file = file.originalname;
cb(null, file.originalname);
}
})
});
module.exports = upload;
저는 AWS를 처음 사용하는데 제가 여기서 뭘 잘못하고 있는지 모르겠습니다 ...
새로 생성 된 미리 서명 된 URL을 브라우저에 붙여 넣으면 어떻게됩니까? 이 미리 지정된 URL이 특정 파일에 대해 생성됩니까? 코드에서 s3 버킷의 파일 이름을 알려야하는 경우
bucketParms의 KEY는 s3 객체의 키 여야합니다.
S3에서 객체를 다운로드하기위한 서명 된 URL
버킷 : test-events ObjectKey : myfolder / test.json
const bucketParms = {
Bucket: "test-events",
Key: "myfolder/test.json",
Expires: 60,
};
다운로드 :
s3.getSignedUrl("getObject", bucketParms, (error, url) => {
if (error) console.log("error", error);
if (url) console.log("url", url);
});
객체를 S3에 업로드하려면 업로드 할 버킷과 키를 지정해야합니다.
s3.getSignedUrl("putObject", bucketParms, (error, url) => {
if (error) console.log("error", error);
if (url) console.log("url", url);
});
이 URL을 업로드에 사용하려면 컬 또는 우편 배달부를 할 수 있습니다.
curl --location --request PUT 'https://test-events.s3.amazonaws.com/98..?X....' \
--header 'Content-Type: image/png' \
--data-binary '/Users/user/image/path'
또는 Body binary
와 PostMan PUT / POST 에서 파일을 선택합니다. 개체가 업로드됩니다 myfolder/test.json
(선택한 파일 이름은 중요하지 않음).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다