s3の特定フォルダ内へのファイルアップロードをLambdaにしたい!
だけどフォルダ名が日本語なのでうまくいかないんだ。
そんなことが起きたので今回は対処法を説明します。
Table of Contents
解決方法
今回の場合、フォルダ名が日本語だとトリガーにできません。
そのため解決をするには2つの方法があります。
- フォルダ名の変更
- utf-8エンコードをする
この二つになります。
- フォルダ名の変更
上記に関しては一つ懸念点があります。
何かしらフォルダ名に依存しているプログラムなどがあればすべて修正する必要が出てきます。
今回、僕の場合には依存プログラムがあったので方法2を試すようにします。
utf-8って?エンコードって?
utf-8とは
まず、僕たちがコンピュータに入力している文字と、コンピュータ自体が解釈している文字というのは違います。
一旦人間後を翻訳してコンピュータの言葉に変えるわけです。
コンピュータは0と1しか理解できません。なので、人が入力した文字を数字に当てはめてあげるわけです。
参考サイト↓
UTF-8とは
あ:00000001
い:00000010
う:00000011
え:00000100
お:00000101
例えばこんな感じの対応表があります。
「あ」と入力した際には、コンピュータ側では「00000001」と認識してくださいね。ということです。
こんな対応表が何種類かあってそのうちの一つがutf-8になります。
おおまかにいうとそんな感じです。
utf-8エンコードとは
まず、エンコードとはデータを他の形に変えることです。
翻訳みたいなイメージです。
英語の映画を日本語吹き替え版で見るのもそんなイメージでしょう。
意味は変えずに、形を変えるということ。
吹き替え版映画は日本語エンコードみたいな言い方になるんですかね?w
ということでutf-8エンコードとは、入力した文字をutf-8の対応表を通じてutf-8の形に変換する事を指します。
utf-8エンコードして解決してみる
さて、エンコードと文字コードが分かった上で問題を解決しましょう。
この場合日本語名が対応していないのが原因だそうです。
今回はクラスメソッドさんの記事を参考にさせていただきました。
[小ネタ] 日本語のS3オブジェクトをLambdaのトリガーに設定してみた
なぜトリガーを日本語に設定できないかというと、オブジェクトURLを確認してみるとわかります。
トリガーにしたい対象のフォルダ内のファイルを選択して、URLをコピーを選択。
すると↓こんな感じのURLが出てきます。
https://spm-master-date.s3-ap-northeast-1.amazonaws.com/upload-test/%E8%B2%A9%E5%A3%B2%E7%8E%8B/test.txt
upload-testの配下のフォルダが変な感じになっていますね。
これは本来「販売王」っていうフォルダ名なんですが、日本語なんでutf-8エンコードされているようです。
ということはトリガーにする際に設定するプリフィックスをutf-8エンコードした状態で入力してみましょう。
こんなサイトを使ってエンコードをしてもOKでしょう↓
ほかにも先ほどのように対象フォルダ内のファイルを選択して、「URLをコピー」して、utf-8エンコードされた状態のプレフィックスを入力してみて下さい。
すると、うまく動くはずです。
まとめ
初めはフォルダ名を変更するしかないと思っていました。
しかし、調べてみると意外と別の解決方法もあったので良かったです。
解決方法はひとつではないのでそれしかないと決めつけないで、いろいろベストに近い解決方法を探す必要があると感じました。