アップロードされたファイルのサイズを


Koliseoでは、我々のユーザーは、イベントのために使用されるアカウントのアバターやバナーを変更するイメージをアップロードする必要があります.イメージのトリミング、リサイズとフォーマットを残します-それは別々のポストのために十分以上です.
ファイルをアップロードするために符号付きURLを使用する理由はいくつかあります.
  • それはGoogleによって管理された安全な機能です.
  • 我々のプラットホームから大きいファイルを抽出することは、それがより速く縮小するのをより速くします.
  • 私たちはどんなバケツの上で我々のユーザーにパーミッションを割り当てません.ちょうどX分にこのコンテンツタイプでファイルをアップロードするのに有効なURLに署名してください.
  • CPUのサイクル+メモリ+ GCEの帯域幅+ GCEストレージ当社のサーバー上でこれらの要求を受信します.唯一の欠点:それは不敬なハードです.
    Signed URLs on GCS
    リクエストを再開可能なアップロードで置く
    符号付きURLを使用してコンテンツをアップロードする2つのオプションがあります:投稿(HTMLフォームのエンコードを使用)とJavaScriptコードからフェッチ要求として実行することができます要求を置く.バージョンv 4はどのように再起動可能なアップロードを使用して後者を行うには、ライブラリが透過的にあなたのサーバーからの最初の投稿要求を実行し、クライアントのコードからプットフェッチで使用することができますURLの結果. .
    主な問題:There are some code examples hereは、最大のファイルサイズに生成されたリンクを制限するために、Content-LengthはPUTリクエストで無視されるので.代わりに、サーバーによって生成された再開可能なアップロードを含むContent-Lengthを使用することができます.
    Map<String, String> extensionHeaders = new HashMap<>();
    extensionHeaders.put("X-Upload-Content-Length", "" + contentLength);
    extensionHeaders.put("Content-Type", "application/octet-stream");
    
    var url =
      storage.signUrl(
        blobInfo,
        15,
        TimeUnit.MINUTES,
        Storage.SignUrlOption.httpMethod(HttpMethod.PUT),
        Storage.SignUrlOption.withExtHeaders(extensionHeaders),
        Storage.SignUrlOption.withV4Signature()
      );
    
    これを行うと、ContentLengthの値を検証でき、大きすぎる場合は拒否します.生成されたURLはアップロードされたファイルに同じサイズを必要とします.クライアント側(
    const response = await fetch(url, {
      method: 'PUT',
      headers: {
        'X-Upload-Content-Length': `${file.size}`,
        'Content-Type': 'application/octet-stream',
      },
      body: file,
    });
    
    また、我々のバケツにCORSポリシーを割り当てる必要があります.
    [
      {
        "origin": ["https://your-website.com"],
        "responseHeader": [
          "Content-Type",
          "Access-Control-Allow-Origin",
          "X-Upload-Content-Length",
          "X-Goog-Resumable"
        ],
        "method": ["PUT", "OPTIONS"],
        "maxAgeSeconds": 3600
      }
    ]
    
    …そしてそれだ!今、私たちはファイルサイズを制限してGCSに直接ファイルをアップロードしています.同様に、必要に応じてX-Upload-Content-Lengthや他のヘッダについても確認できます.
    Koliseoで、我々は一緒にイベント管理のためのツールの次世代を入れている.あなたが我々が建築しているものとどのように興味があるならば、確認してください.