어제 장염에 걸려 배가 너무 아파서 개발일지도 못올리고 바로자서 어제거랑 오늘거랑 같이 올려야겠다 .. ㅠ
아프지말자 !
나는 클라이언트가 업로드한 파일을 저장하기 위해 s3를 사용했고 버킷을 만들엇다.
버킷을 설정하기 위해서는 cors 정책 등 꽤 많은 것들을 설정해야했다.
브라우저의 script를 통해 Amazon S3 Bucket에 접근하려면 우리는 S3 Bucket의 CORS를 설정
CORS란 Cross Origin Resource Sharing의 줄임말로, Cross-Site Http Request를 가능하게 하는 표준 규약입니다. 간단히 이야기하면 다른 도메인에서 어떤 http request가 들어왔을 때 이에 어떻게 반응할지를 결정해주는 규칙 문서라고 생각하시면 됩니다.
또한 우리는 “자격 증명 풀"을 통해 우리가 만든 애플리케이션에 접속한 사용자가 우리의 S3 Bucket에 접근할 수 있는 권한을 부여하려고 하는 것입니다. 이를 위해선 먼저 Amazon Cognito console에서 자격증명 풀을 생성해야합니다.
나는 위방법대로 하지는 않고 iam 사용자를 생성하여 키와 비밀키를 얻고 그것을 이용했다.
const putFile = file => {
const albumBucketName = ''; // S3의 버킷 이름
const region = 'ap-northeast-2'; // 서울
const accessKeyId = ''; // IAM에서 생성한 사용자의 accessKeyId
const secretAccessKey = ''; // IAM에서 생성한 사용자의 secretAccessKey
AWS.config.update({
region,
accessKeyId,
secretAccessKey
});
const upload = new AWS.S3.ManagedUpload({
params: {
Bucket: albumBucketName,
Key: file.name,
Body: file,
ACL: "public-read"
}
});
const promise = upload.promise();
promise.then(
function(data) {
console.log("Successfully uploaded photo.");
},
function(err) {
return console.log("There was an error uploading your photo: ", err.message);
}
);
};
위 코드를 사용하여 파일을 s3에 업로드했고 s3의 내가 만든 버킷에서 직접 확인해보면 파일이 올라와있었다.
우리는 클라이언트가 업로드한 사진을 s3에 올리고 이것을 필요에 맞게 불러와야했다.
클라이언트가 리뷰를 작성할 때 업로드한 사진또한 review db에 저장해서 그 명소에 대한 리뷰를 불러올 때 이미지를 같이 불러와야했다,
let filename = $('input[type=file]').val().replace(/C:\\fakepath\\/i, '')
<a href="/reviewpage?place={{ place[0].name }}" class="more"> 리뷰작성 및 더보기 ></a>
@app.route('/3page',methods=['GET'])
def show_detail2():
name = request.args.get('name')
#명소에 대한 정보 불러오기
places = db.sample.find({"name": name}, {'_id': False})
#명소에 대한 리뷰 불러오기
# reviews= db.reviews.find({"where": name}, {'_id': False})
#최신리뷰 3개만 3페이지에 나타나게
reviews = list(db.reviews.find({"where": name}, {'_id': False}).sort([("reg_date", -1)]))
places=list(places)
reviews=list(reviews)
if len(reviews)>3:
reviews=reviews[0:3]
print(reviews)
return render_template('3page-.html',place=places,reviews=reviews)