TIL 25 | S3
S3
アマゾンS 3は、アマゾンWebサービスが提供するオンラインストレージWebサービスである
S 3設定
パブリックアクセスの許可
s3.py
クラスでinitジェネレータを使用してクライアントを保存する
クライアントは、Amazonサービス、アクセスキー値、アクセスIDをオブジェクトに格納します.
ファイルをs 3にアップロードするにはupload fileobj関数を使用します.
この関数は、ファイルとファイル名、フォルダ名(パス)、ファイルタイプなどを格納できます.
ファイルのurlをDBに保存すると、そのファイルを後続処理できます
キー値を使用したファイルの変更
urlを使用してファイルをクライアントに渡してロードできます.
boto 3を使ってs 3を使うことができます
プレイヤーが許可されたプレイヤーであるか否かを判断し、トークン内のプレイヤー情報をロードする
ファイル名uuid 4を使用して重複しないファイル名
s3.js
Multierとmulter-s 3を使用してファイル転送のリクエストを受信できます.
aws-sdkでs 3を利用できます
uuidを使用してファイル名の重複を解消
パケット名、ファイルタイプ、キー値などをmulters 3に格納および転送する
cbはnextに似た関数です
メタデータとキー値を次のコールバック関数に渡す
s3.upload.singleミドルウェアによるファイルの受信
キー値を指定できます
アマゾンS 3は、アマゾンWebサービスが提供するオンラインストレージWebサービスである
S 3設定
パブリックアクセスの許可
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketname/*"
}
]
}
Djangos3.py
クラスでinitジェネレータを使用してクライアントを保存する
クライアントは、Amazonサービス、アクセスキー値、アクセスIDをオブジェクトに格納します.
ファイルをs 3にアップロードするにはupload fileobj関数を使用します.
この関数は、ファイルとファイル名、フォルダ名(パス)、ファイルタイプなどを格納できます.
ファイルのurlをDBに保存すると、そのファイルを後続処理できます
キー値を使用したファイルの変更
urlを使用してファイルをクライアントに渡してロードできます.
from my_settings import AWS_STORAGE_BUCKET_NAME, AWS_S3_CUSTOM_DOMAIN
class S3Client:
def __init__(self, s3_client):
self.s3_client = s3_client
def upload(self, file, file_name, FOLDER_NAME):
self.s3_client.upload_fileobj(
file,
AWS_STORAGE_BUCKET_NAME,
f"{FOLDER_NAME}/{file_name}",
ExtraArgs={"ContentType": file.content_type}
)
file_urls = f"https://{AWS_S3_CUSTOM_DOMAIN}/{FOLDER_NAME}/{file_name}"
return file_urls
def delete(self, file_name):
self.s3_client.delete_object(
Bucket=AWS_STORAGE_BUCKET_NAME,
Key=file_name)
view.pyboto 3を使ってs 3を使うことができます
プレイヤーが許可されたプレイヤーであるか否かを判断し、トークン内のプレイヤー情報をロードする
ファイル名uuid 4を使用して重複しないファイル名
import boto3
from uuid import uuid4
client = boto3.client(
's3',
aws_access_key_id = MY_AWS_ACCESS_KEY_ID,
aws_secret_access_key = MY_AWS_SECRET_ACCESS_KEY
)
class ProfileUpload(View):
@LoginRequired
def post(self, request):
try:
file = request.FILES.get('profile_file')
user = request.user
if not file:
return JsonResponse({'massage':"none file"}, status=404)
s3_client = S3Client(client)
file_name = uuid4().hex
FOLDER_NAME = "profile"
file_urls = s3_client.upload(file, file_name, FOLDER_NAME)
user.profile_url = file_urls
user.save()
return JsonResponse({'massege':'create'}, status=200)
except KeyError:
return JsonResponse({"message" : "key error"}, status=400)
Node.JSs3.js
Multierとmulter-s 3を使用してファイル転送のリクエストを受信できます.
aws-sdkでs 3を利用できます
uuidを使用してファイル名の重複を解消
パケット名、ファイルタイプ、キー値などをmulters 3に格納および転送する
cbはnextに似た関数です
メタデータとキー値を次のコールバック関数に渡す
const multer = require("multer");
const multerS3 = require("multer-s3");
const aws = require("aws-sdk");
const { v4 } = require("uuid")
require('dotenv').config()
const BUCKET_NAME = process.env.BUCKET_NAME
const s3 = new aws.S3({
accessKeyId: process.env.AMAZONE_ACCESS_KEY_ID,
secretAccessKey: process.env.AMAZONE_SECRET_ACCESS_KEY,
region: process.env.AMAZONE_REGION,
});
exports.upload = multer({
storage: multerS3({
s3: s3,
bucket: BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
acl: "public-read",
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
cb(
null,
"profile/" + v4() + "." + file.originalname.split(".").pop()
);
},
}),
});
view.jss3.upload.singleミドルウェアによるファイルの受信
キー値を指定できます
const express = require("express");
const router = express.Router();
const s3 = require("./S3");
router.post(
"/profile",
s3.delete,
s3.upload.single("profile"),
Profile.uploadProfile
);
module.exports = router;
Reference
この問題について(TIL 25 | S3), 我々は、より多くの情報をここで見つけました https://velog.io/@action2thefuture/TIL-25-S3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol