S3에 이미지 업로드해서 프로필 사진 DB에 넣기
test.html
function upload() {
const imageInput = $('#imageInput')[0]
// 파일을 여러개 선택할 수 있으므로 files 라는 객체에 담긴다.
console.log('imageInput: ', imageInput.files)
if (imageInput.files.length === 0) {
alert('파일은 선택해주세요')
return
}
const formData = new FormData()
formData.append('profile_image', imageInput.files[0])
$.ajax({
type: 'POST',
url: 'http://localhost:3000/api/upload',
processData: false,
contentType: false,
data: formData,
headers: {
Authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJmYW5jeWVyIiwiaWF0IjoxNjQ1MDkwNTQyfQ.unU3PcIWsnm7svuqZbW9QEqX_4XIEAlFf-HWWpacEmg'
},
success: function (rtn) {
const message = rtn.data.values[0]
console.log('message: ', message)
$('#resultUploadPath').text(message.uploadFilePath)
},
err: function (err) {
console.log('err:', err)
},
})
}
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" id="imageInput" />
</form>
<button onclick="upload()">업로드</button>
multer.js
const multer = require('multer')
const multerS3 = require('multer-s3')
const aws = require('aws-sdk')
aws.config.loadFromPath(__dirname + '/../s3.json')
const s3 = new aws.S3()
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'mini-project-image-upload',
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function (req, file, cb) {
cb(
null,
`${Date.now()}_profile_picture` +
'.' +
file.originalname.split('.').pop()
)
},
}),
})
module.exports = upload
profile-image.js
const express = require('express')
const User = require('../models/user')
const router = express.Router()
const authMiddleware = require('./auth-middleware')
const upload = require('../modules/multer')
// 프로필 이미지 업로드
router.post('/upload', authMiddleware, upload.single('profile_image'), async (req, res) => {
const userId = res.locals.user[0].userId
const profileImageUrl = req.file.location
const user = await User.findOne({ userId })
user.profileImageUrl = profileImageUrl
await user.save()
res.send({})
})
// 프로필 사진 보여주기
router.post('/profile_image', authMiddleware, async (req, res) => {
const userId = res.locals.user[0].userId
const user = await User.findOne({ userId })
const profileImageUrl = user.profileImageUrl
res.json({ profileImageUrl })
})
module.exports = router
Author And Source
이 문제에 관하여(S3에 이미지 업로드해서 프로필 사진 DB에 넣기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fancyer/S3에-이미지-업로드해서-프로필-사진-DB에-넣기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)