Express+AWS 3イメージのアップロード


1.AWS 3欄


AWS Simple Storage Service(S3)
オブジェクトストレージサービス.データをパケット内のオブジェクトとして格納します.
  • Webサイトおよびモバイルアプリケーションは、必要なデータ量を格納および保護します.
  • データ・アクセスを最適化、構造化、構成する管理機能を提供します.
  • バケツ


    AWS 3に格納されているオブジェクトのコンテナ
  • bucketに格納できるオブジェクトの数に制限はありません
    -bucket名はパケット命名規則に従う必要があります.
  • オブジェクト


    S 3に記憶されているデフォルトオブジェクト

  • オブジェクトは、オブジェクトデータとメタデータで構成されます.
    -メタデータ:オブジェクトの名前を記述する-値ペアのセット(ex.content-typeなどの標準HTTPメタデータのような前回の変更日と同じデフォルトメタデータ)
    -標準HTTPメタデータ:

  • オブジェクトはキー(名前)とバージョンIDで識別されます.

  • Webサービス・エンド・ポイント、パケット名、鍵、バージョンの組み合わせにより、アドレスを一意に指定できます.
    ex)アメリカ西部地域で生成されたDOC-EXAMPLE-BUCKETというパケットに格納されているphotos/puppy.jpgというオブジェクトのURLはhttps://DOC-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/photos/puppy.jpgである
    すなわちhttps://[버킷 이름].s3.[리전 이름].amazonaws.com/[키]
  • バージョン管理


    S 3バージョン制御を使用すると、同じパケット内で複数のオブジェクトを変形することができ、検索および復元することができる.

    S 3アクセスポイント


    アクセス可能なデータのネットワーク・エンド・ポイント
  • アクセスポイントがパケットに接続され、パケットに格納されたオブジェクトを取得するか、オブジェクトを配置する操作を実行します.
  • 利子


    パケットを格納する地理的位置AWS領域
  • AmazonS 3にアクセスおよび使用するのは、アカウントのAWSバージョンのみです.
  • 2.AWS 3パケットの作成


    https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/create-bucket-overview.html

    3.AWS 3へのアクセス


    3-1)パッケージのインストール

  • multer-s3-ファイルをアップロードするmultipart/form-dataを処理するノード.jsの中装
  • ファイルを受信し、要求にファイルを追加して要求に渡す.
  • AWS-SDK:これらのライブラリは、プログラミング制御AWSの便利さを提供します.これはREST APIをパッケージする形態です.npm install aws-sdk multer-s3
  • 3-2)S 3設定ファイルの作成

    // s3.json
    
    { 
    	"accessKeyId": "엑세스 키", 
        "secretAccessKey": "시크릿 엑세스 키", 
        "region": "ap-northeast-2" 
    }
    //imgAPI.ts
    import multerS3 from 'multer-s3';
    import aws from 'aws-sdk';
    
    // aws config 파일 읽기
    aws.config.loadFromPath('s3.json');
    
    // s3 객체 생성
    const s3 = new aws.S3();
    
    // multer 에 대한 설정값
    const awsUpload = multer({
      storage: multerS3({
        s3: s3,
        bucket: 'bevelog-bucket', // 객체를 업로드할 버킷 이름
        acl: 'public-read', // Access control for the file
        key: function (req, file, cb) { // 객체의 키로 고유한 식별자 이기 때문에 겹치면 안됨
          cb(null, Math.floor(Math.random() * 1000).toString() + Date.now() + '.' + file.originalname.split('.').pop());
        }
      }),
    });
    

    3-3)アップロードイメージ

    router.post('/images/:username/thumbnail', awsUpload.single('thumbnail'), (req, response) => {
      // 코드 중략
    })
    multer.single(fileName):filenameというファイルリクエストを受信します.ファイルに保存し、次の(next()に渡します.
    クエリreq.fileの場合、locationプロパティにはbucketに格納されているオブジェクトのURLが含まれます.

    ここまで、bucketに画像がアップロードされているのが見えます.

    その後、S 3パケットに格納された画像をクライアントに送信するためには、THUMBNAIL_IMAGESテーブルを生成し、パケットに格納されたオブジェクトをインポートするための情報を格納する必要がある.
    したがって、THUMBNNAIL_IMAGEStableに挿入する情報は、次のとおりです.
  • id : req.file.key
  • fk_user_name : req.params.username
  • path : req.file.location
  • file_size : req.file.size
  • INSERT INTO public."THUMBNAIL_IMAGES" ('id','fk_user_name', 'path', 'file_size') 
    VALUES (`${req.file.key}`, `${req.params.username}`, `${req.file.location}`, `${req.file.size}`)