PC(ブラウザ)→AWS:S3へのファイルのアップロード

前提

AWSのマイクロサービスを組み合わせて簡易システム(テキストファイルのアップロード/ダウンロードシステム)を構築しています。

[システムの構成]
クライアント(ブラウザ)---AWS:APIGateway---AWS:Lambda---AWS:S3

[使用言語]
クライアント:HTML+JavaScript
AWS:Lambda:python

[対象ファイル]
・テキストファイル(SJIS、UTF8)、バイナリーファイル

[その他]
クライアントのOS:Windows11
クライアントのブラウザ:chrome

試したこと

・テキストファイルの場合、読み込み対象ファイルの文字コードを指定すれば、問題なく取り込める
・読み込んだ内容をAWSに送信すると、AWS内では文字コードが「utf8」になっている

悩んでいること

・読み込み対象ファイルの文字コードは意識したくない(バイナリーもあるので)
・AWS:S3にファイルを保存する際も、文字コードを意識したくない

該当のソースコード

テキストファイルを読み書きするプログラムになっています

■クライアント(JavaScript):ファイル読み込み部 var textdata = ''; : const fr= new FileReader(); fr.onload = function(event) { textdata = event.target.result; // ← utf16の文字列で読まれる。JavaScriptの内部エンコーディングがutf16だからだろう → 正しい動作と思われる } fr.readAsText('ファイル名', 'shift-jis') // SJISファイルを読む場合 //fr.readAsText('ファイル名', 'utf-8') // UTF8のファイルを読む場合 :
■クライアント(JavaScript):ファイル送信部 var textdata = ''; : // WebAPI呼び出し準備 const request = new XMLHttpRequest(); : request.addEventListener('loadend', (event)=>{ // アップロード完了処理 }); // WebAPI呼び出し(非同期) request.open('POST', uri, false); : request.send(textdata); :
■AWS:Lambdaのコード(python) def lambda_handler(event, context): : data = event['body'] : # s3にファイルを作成(utf8で書き込まれる) # ※pythonの内部エンコーディングがutf8だからだろう → 正しいと思われる s3c = boto3.client('s3') response = s3c.put_object( Bucket = BUCKET_NAME, Key = KEY_Name, Body = data )

実現したいこと

ファイルの種類を意識せずにアップロードさせたい(ダウンロードは大丈夫でした)
.
.
.

コメントを投稿

0 コメント