前提
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 )
実現したいこと
ファイルの種類を意識せずにアップロードさせたい(ダウンロードは大丈夫でした)
.
.
.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/12 07:47
2022/08/12 08:38