우선 이번에는..
- write페이지에 이미지넣기 input태그 추가
- 서버에서는 받은 이미지 S3에 저장
- 이미지 URL을 DB에 글이랑 함께 보관
- 에러 및 예외처리
참고로 S3에 있던 이미지를 html로 보여주기 위해서는
이미지 저장시에 발급받은 URL을 DB에 보관해두고,
필요한 때에 img태그로 넣어주는 방법이 있다.
해보자!!!!!!
터미널에 npm install multer multer-s3 @aws-sdk/client-s3 입력후 설치

아래 코드 필요한부분 수정해서 server.js 상단에 넣어준다
const { S3Client } = require('@aws-sdk/client-s3')
const multer = require('multer')
const multerS3 = require('multer-s3')
const s3 = new S3Client({
region : 'ap-northeast-2', //지역 및 나라이름(현재는 서울)
credentials : {
accessKeyId : 'IAM에서 발급받은 액세스키',
secretAccessKey : 'IAM에서 발급받은 시크릿키'
}
})
const upload = multer({
storage: multerS3({
s3: s3,
bucket: '님들버킷이름',
key: function (요청, file, cb) {
cb(null, Date.now().toString()) //업로드시 파일명 변경가능
}
})
})


파일명은 겹치면 안되기때문에 Date를 사용!
이까지 하면 upload.single('input명')함수 실행하면 S3에 업로드를 시킬 수 있다!
write.ejs페이지에 type이 file인 input태그를 추가하며,enctype="multipart/form-data"추가,type="file" name="img1" accept="image/*"넣어주기

upload.single함수를 실행하여 테스트해보자./add로 post요청이 되는데,
name="img1"을 가진 이미지가 들어오면 자동으로 S3에 업로드를 해줄 것!요청.file을 콘솔창에 찍어 URL도 확인해보자~

콘솔도 확인해보면

이렇게 찍혀있는데, 저 location을 보면 이미지 경로가 나와있다.
img src로 이미지를 갖다써도 무방하고, 요청.file.location으로 편안~하게 사용할 수 있게 되었다^^

테스트는 잘 들어간다!

이미지를 여러장 업로드 하고싶은 경우,
우선 ejs파일에 있던 이미지 input태그에 multiple추가

server.js에서 사용했던 upload.single대신,
upload.array('input명', 개수)를 사용.
또한, 요청.file이 아니라 요청.files를 사용해줘야 한다.

우선 detail.ejs에

img태그를 추가하고 src로 이미지를 넣어주었다.
사이즈가 너무 커서 style로 250px을 맞춰주니,

잘 뜬다.
간단하게 하기 위해서는 미들웨어를 사용하지 않고

이렇게 에러가 발생하는 경우에만 if문으로 잡아내어 처리할 수 있다.