一時的なライセンス方式に基づくOSSアップロード


一時的なライセンス方式に基づくOSSアップロード
OSSは、一時的なライセンスURLをサポートしており、一時的なアップロードとダウンロードが可能です.ここでは、プロジェクトでどのように利用するかを紹介します.対応シーン:クライアントはファイルをアップロードする必要がありますが、accessKeyIdとaccessKeySecretをクライアントに送信したり、OSS-SDKを継承できない場合があります.アップロードは相変わらずクライアントとOSSサーバの間で行われています.アプリケーションの理論コアはOSSが提供する「URLに署名が含まれています」というものです.ここを参照してください.
実現の考え方:
Created with Raphaël 2.1.2クライアントサービスサーバOSSサーバOSSサーバ[A]アップロード用の一時URL[B]を取得し、OSS-SDKを呼び出して一時URL[C]を生成し、一時URL[D]を返します.一時URLアップロードファイル[E]を使ってアップロード結果を返します.
コードの実装
  • [A]クライアントは、アップロードアドレスの取得要求をサービスサーバに送信し、一般的にPOST要求であり、アップロードするファイル情報(ファイル名)
  • をサーバに送信する.
  • [B]サービスサーバは、対応要求を受けてユーザのアイデンティティを検証し、OS-SDKを呼び出したり、対応する一時的なURLを手動で生成したりすることにより、NodeJSでは以下のコードで生成することができます.(サービスサーバ端末)
  • var client = new OSS({
        endpoint: configInfo.OSS_ENDPOINT,
        accessKeyId: configInfo.OSS_KEY,
        accessKeySecret: configInfo.OSS_SECERT,
        bucket: configInfo.OSS_BUCKET
    });
    function getTempSignedUrl(ossObjectPath,type){
      var url = client.signatureUrl(ossObjectPath, {
        expires: 60, //    ,        60s
        method: 'PUT', //     ,    PUT;        , GET
        'content-type': type||'application/octet-stream' //conent  ,   octet-stream
      });
      console.log(url);
      return url;
    }
  • [C]サービスサーバは、生成されたurlをクライアントに返します.すなわち、先ほどのPOST要求の応答です.
  • [D]クライアントは、一時的なURLに従ってウェブブラウザをアップロードし、下記のコードを使ってアップロードすることができます.
    function putfileToOSS(url, domId, contentType) {
            var f = document.getElementById(domId); //input file  
            var uploadReq = new Request(url, { //url      URL
                method: "PUT",
                headers: new Headers({ 'Content-Type': contentType||'application/octet-stream' }),
                body: f.files[0]  //       ,    
            });
            return fetch(uploadReq).then(x => x.text()).then(x => {
                console.log(x); //         text
                return x;
            });
        }
  • [E]OSSサーバはアップロード結果に戻ります.200は成功です.その他は失敗です.よくあるのは403(有効期限が切れたり、権限が間違っています.)などです.具体的な情報はOSS関連文書を参照してください.
  • リスク
    一時URLが漏れてしまう可能性がありますので、業務面では不用意または意図的に漏洩しないように注意してください.同じように、臨時URLの有効期限が長くないと、このリスクは大きくなります.content-typeを作成することにより、リスクをさらに減らすことができます.
    改善が必要である
    より厳格な場合には、上記機能に基づいてファイルMD 5の転送を追加することができ、すなわちアップロード待ちファイルのMD 5に基づいて一時的なURLを生成することで、クライアントに一定の要求があるが、より安全性が高い.