LoginSignup
0
6

More than 3 years have passed since last update.

<input type="file">で指定したファイルをAxiosを使ってS3の署名付きURLへファイルをアップロードする

Last updated at Posted at 2020-03-04

概要

<input type="file">で指定したファイルをAxiosを使ってS3の署名付きURLへファイルをアップロードする。

実装

var a = $('input[type="file"]')
var reader = new FileReader()
reader.readAsArrayBuffer(a.files[0])

// アップロード用の署名付きURL
var url = 'https://test-pre-signed-url-bucket.s3.amazonaws.com/put/update?...略...'
axios({
    method: 'PUT',
    url: url,
    headers: {
        'Content-Type': 'image/*', // アップロードしたいファイルに合わせる
    },
    data: reader.result // reader.readAsArrayBuffer(a.files[0]) した結果が取得できる
    })

エラー時対応

CORSのエラーになる場合

S3 > バケット選択 > アクセス権限 > CORSの設定

を行う必要がある。

403が返ってくる場合

S3の署名バージョンを4にする必要がある。

s3 = boto3.client('s3', config=Config(signature_version='s3v4'))

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='put_object',
    Params={
        'Bucket': 'bucket-name',
        'Key': 'key-name'
    }
)

参考

0
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
6