画像プレビュー/s 3にアップロード
preview
アイコンをクリックすると、input(type=file)の役割の代わりになります.画像プレビューがアクティブな場合は、アイコンではなく3つの連想を追加します.
トップページ
画像ファイルをクリックすると
//먼저 훅을 사용하여 Image ele의 src의 상태를 변경시켜준다.
const [fileUrl, setFileUrl] = useState(null);
//인풋이 onChange 될 때
const chgPreview = (e) => {
//현재 이미지 파일
const imageFile = e.target.files[0];
//선택한 이미지 파일의 url
const imageUrl = URL.createObjectURL(imageFile);
//Image ele의 src를 해당 이미지 url로 변경시켜준다.
setFileUrl(imageUrl)
}
...
//인풋 파일에 id값을 주고 라벨에서 for='id값'을 해주면 라벨이 해당 인풋파일을 대신 할 수 있다.
<label for="imgFile">
//미리보기가 활성화 될 경우 아이콘을 가리고 이미지를 띄워주기 위해 삼항연산자를 사용하였다.
{!fileUrl ?
<Grid bg={'#eee'} width="374px" height="236px" margin="23px auto" border_radius="44px" padding="15% 30%">
<BiCamera size="118px" color={'white'}/>
</Grid> :
<Image src={fileUrl} width="374px" height="236px" margin="3% auto"/>
}
</label>
//라벨이 인풋파일을 대신하고 있으므로 해당 인풋파일은 숨김처리 된 상태이다.
<FileBox type="file" accept="image/*" ref={fileUpload} onChange={chgPreview} id="imgFile"/>
画像をs 3にアップロード
1.s 3でのパケットの作成
(s 3にイメージをアップロードするため、パブリックアクセスのブロックをすべて解除する必要があります!)
2.パケットの設定
パケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicListGet",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:List*",
"s3:Get*"
],
"Resource": "내 버킷 arn으로 수정/*"
}
]
}
CORS
☝🏻 CORS?
CORSはもともとXMLファイルだったのですが、後にJSON形式になってしまい、それなりの部分を見つけるのに時間がかかりました.
[
{
//*로 할 경우 모든 도메인 허용
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE",
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"x-amz-server-side-encryption",
"x-amz-request-id",
"x-amz-id-2"
],
"MaxAgeSeconds": 3000
}
]
クライアントコード
☝🏻 s 3にファイルのアップロードを支援するパッケージをインストールする必要があります.
yarn add react-aws-s3
import S3upload from 'react-aws-s3';
const submitBtn = (e) => {
e.preventDefault();
let file = fileUpload.current.files[0];
let newFileName = fileUpload.current.files[0].name;
//여기 진짜 주의!!!!!!!!!
const config = {
bucketName: process.env.REACT_APP_BUCKET_NAME,
region: process.env.REACT_APP_REGION,
accessKeyId: process.env.REACT_APP_ACCESS_ID,
secretAccessKey: process.env.REACT_APP_ACCESS_KEY,
};
const ReactS3Client = new S3upload(config);
ReactS3Client.uploadFile(file, newFileName).then(data => {
if(data.status === 204) {
let imgUrl = data.location
dispatch(addRecordDB(recordDate, imgUrl))
} else {
window.alert('사진 업로드에 오류가 있어요! 관리자에게 문의해주세요.')
}
});
}
🚨 上の関数configにはawsのaccesskeyとセキュリティキーが含まれています.(このセクションはawsで作成する必要があります!!)
ここで注意しなければならないのは、このセキュリティキーが絶対に露出してはいけないのは初めてです.envファイルを作成して適用すると、常にエラーが発生するため、対応する鍵を直接書いてテストします.そしてもう一回envファイルを適用するのを忘れていたので、何も考えずにバニラでPushを押した瞬間だったなぁ…!!!その瞬間からawsは自分の身長がディーンに露出しているというメールを受け取ったので、私は怖くなった...
幸いにもアップロードすると、私も気づいて、すぐにドアの鍵を逆さまにして、万が一に備えて、相応の警備鍵も削除しました.
複数のブログを見ていて、発見が遅れたり知らなかったりすると、ハッカーたちが有名なグルメ店だと言っていて、とても素敵な貸し出しが見られるので注意が必要です…!
Reference
この問題について(画像プレビュー/s 3にアップロード), 我々は、より多くの情報をここで見つけました https://velog.io/@skdud4659/이미지-preview-s3에-업로드하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol