事前に署名されたURLを使用してアップロードした後、ファイルに追加情報があるAWSS3上のファイル

jagad89

事前に署名されたURLを使用してファイルをS3バケットに直接アップロードしようとしています。

以下はnode.jsで記述されたサーバーエンドコードであり、署名されたURLを正常に作成します。

const s3 = new AWS.S3({
    accessKeyId: config.accessKeyId,
    secretAccessKey:  config.secretAccessKey,
    region: config.awsConfig.region
});
const signedUrlExpireSeconds = 60 * 60;
let mimeType = "video/mp4";

const filename =Date.now();

const Key = `${filename}.mp4`;

const params = {
    Bucket: config.awsConfig.aws_upload_bucket, 
    Key: Key,
    Expires: signedUrlExpireSeconds,
    ACL: 'public-read',
    ContentType: mimeType
    };

s3.getSignedUrl('putObject', params, function (err, url) {
    if (err) {
        console.log('Error getting presigned url from AWS S3');
        res.json({ success: false, message: 'Pre-Signed URL error', urls: fileurls });
    }
    else {
        console.log('Presigned URL: ', url);
        res.json({ success: true, message: 'AWS SDK S3 Pre-signed urls generated successfully.', url: url, Key:Key, ContentType: mimeType  });
    }
});

以下はReactの最後に書かれたコードです。

const DropzoneArea = props => {
    const [files, setFiles] = useState([]);
    let awsFile = '';

    const onUploadHandler = files => {
        if (files.length === 0) {
            console.log('Debug : [components DropzoneArea onUploadHandler] files => ', files);
            return;
        }
        awsFile = files[0]
        // calling the API to get presigned url.
        getPreSignedURL(files[0].type,S3preSignedURLCallback)        
    };

    const S3preSignedURLCallback = videoData => {
        const xhr = new XMLHttpRequest();
        xhr.open('PUT', videoData.url);
        xhr.setRequestHeader('Content-Type', videoData.ContentType);
        var res = new FormData();
        res.append('file', awsFile);
        xhr.send(res);
    };
}

上記のコードを使用すると、ファイルはs3に正常にアップロードされますが、ビデオを再生できませんでした。そこで、S3上のファイルをアップロードした実際のファイルと比較しました。S3ファイルにも追加のリクエストデータがほとんど書き込まれていないことがわかりました。ここに画像の説明を入力してください

私がここで行っている小さな間違いは、バグを見つけることができません。助けてください。

マルコスカサグランデ

使用せずformData、ファイルを直接送信してください

const S3preSignedURLCallback = videoData => {
        const xhr = new XMLHttpRequest();
        xhr.open('PUT', videoData.url);
        xhr.setRequestHeader('Content-Type', videoData.ContentType);
        // Send the binary data.
        // Since a File is a Blob, you can send it directly.
        xmlHttpRequest.send(awsFile);
};

表示される違いは、AWSが未加工のリクエストを解析せずに保存しているためです。また、正しい画像がマルチパート/フォームデータリクエストであることがわかります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    Oracle11gクライアントを使用したOracle19Cサーバーへの接続

  2. 2

    Ansibleで複数行のシェルスクリプトを実行する方法

  3. 3

    Reactでclsxを使用する方法

  4. 4

    Python / SciPyのピーク検出アルゴリズム

  5. 5

    小さいデータセットサイズと大きいデータセットサイズを使用するMPI_Gatherを使用したMPI_Barrier?

  6. 6

    フィルタスライダーで複数の範囲を選択します-Tableau

  7. 7

    MariaDBによるデータベースの破損:テーブルがエンジンに存在しません

  8. 8

    複数の条件でループを構築する

  9. 9

    Google Cloud Storage から単一ページの React アプリを提供する

  10. 10

    Hide textOutput() when un-click row of a DT::datatable in shiny app

  11. 11

    JavaのREST APIの認証、JWTとベストプラクティス

  12. 12

    Angular 9 TypeError:未定義のプロパティ「subscribe」を読み取れません

  13. 13

    JavaからのMATLAB関数によりランタイムエラーが発生する(EXCEPTION_ACCESS_VIOLATION)

  14. 14

    Eclipseに既存のJavaプロジェクトをインポートしますが、JFrameのデザインビューが存在しませんか?

  15. 15

    Openlayers 3 : Interaction DragBox が機能しない

  16. 16

    print( "\ 0007")がビープ音を鳴らさないのはなぜですか?

  17. 17

    なぜArrays.copyOfは2倍高速System.arraycopyのより小さなアレイ用のでしょうか?

  18. 18

    App Engineクイックスタートから「helloworld.go」をアンデプロイし、代わりにバケット内のhtmlをポイントするにはどうすればよいですか?

  19. 19

    LaravelはDB接続を自動的に閉じますか?

  20. 20

    グラフ(.PNG)ファイルをエクスポートするZabbix

  21. 21

    Eclipseエラー:ビルドパスが不完全であると表示されます

ホットタグ

アーカイブ