8 글 보임 - 1 에서 8 까지 (총 8 중에서)
-
글쓴이글
-
2023년 12월 30일 03:16 #108259
김태훈참가자write/page.js
import { getServerSession } from 'next-auth/next' import { authOptions } from '@/pages/api/auth/[...nextauth]' import WriteElements from './WriteElements'
export default async function Write(){ let session = await getServerSession(authOptions) return ( <div> { session ? <WriteElements/> : <div>로그인해라</div> } </div> ) } writeElements
'use client'
import { useSession } from "next-auth/react" import { useState } from "react"
export default function WriteElements(){
let [src, setSrc] = useState('')
return( <div className="p-20"> <h4>글작성</h4> <form action="/api/post/new" method="POST"> <input name="title" placeholder="글제목"/> <input name="content" placeholder="글내용"/> <input type="file" accept="image/*" onChange={async(e)=>{ let file = e.target.files[0] let filename = encodeURIComponent(file.name) let res = await fetch(`/api/post/image?file=${filename}`) res = await res.json() console.log(res) //S3 업로드 const formData = new FormData() Object.entries({ ...res.fields, file }).forEach(([key, value]) => { formData.append(key, value) }) let 업로드결과 = await fetch(res.url, { method: 'POST', body: formData, }) console.log(업로드결과)
if (업로드결과.ok) { setSrc(업로드결과.url + '/' + filename) } else { console.log('실패') } }} /> < img src={src}/> <button type="submit">전송</button> </form> </div> ) } api/post/image.js
import aws from 'aws-sdk' export default async function handler(request, response){ aws.config.update({ accessKeyId: process.env.ACCESS_KEY, secretAccessKey: process.env.SECRET_KEY, region: 'ap-northeast-2', signatureVersion: 'v4', })
const s3 = new aws.S3(); const url = await s3.createPresignedPost({ Bucket: process.env.BUCKET_NAME, Fields: { key : request.query.file }, Expires: 60, // seconds Conditions: [ ['content-length-range', 0, 1048576], //파일용량 1MB 까지 제한 ], })
response.status(200).json(url) } 현재 코드는 이렇게 돼있고 이미지 업로드해서 미리보기 띄우려는데 POST https://s3.ap-northeast-2.amazonaws.com/taenge 403 (Forbidden) 라는 오류가 계속 뜨면서 미리보기도 안되고 실패라는 문구만 나옵니다 ㅠㅠ
2023년 12월 30일 10:20 #108265
김태훈참가자버킷 정책 { "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::taenge/*" }, { "Sid": "2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::654953291727:root" }, "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::taenge/*" } ] } CORS [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "ETag" ] } ] 이렇게 설정돼있습니다
2023년 12월 30일 17:06 #108296
codingapple키 마스터acl이나 퍼블릭액세스도 설정잘해놨나 확인합시다 아니면 arn:aws:iam::654953291727:root 이게 틀렸을수도요
2024년 1월 3일 07:17 #108669
김태훈참가자acl 비활성화도 했고 퍼블릭 액세스 가능이라고 뜹니다ㅠㅠ 혹시 몰라서 새로 버킷 만들어서 해봤는데도 콘솔에 WriteElements.js:28 부분 let 업로드결과 = await fetch(res.url, { method: 'POST', body: formData, }) 이부분에서 POST https://s3.ap-northeast-2.amazonaws.com/taenimg 403 (Forbidden) 이 에러메시지와 실패라는 콘솔이 찍힙니다 ㅠㅠ
-
글쓴이글
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
- 답변은 로그인 후 가능합니다.