Google App Engine Java スタンダード+Spring Boot+Vuetify ファイルのアップロードと結果をJSONで返す
GAE Java Std. と Spring Boot と Vue+Vuetify と Xamarin でアプリのテンプレートを構築する。
ここまでにやってきたことは以下。
- Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する
-
Google App Engine Java Standard環境に Spring Bootのテンプレートエンジン Thymeleafを適用
-
Google App Engine Java スタンダード環境 の Spring BootでVuetify導入からクロスドメインAjax通信
-
Google Google App Engine Java スタンダード+Spring Boot+Vuetify 開発環境と本番環境の設定からGAEへデプロイ
次に、ファイルのアップロードと受け取り、および、Spring Boot(Spring MVC)側からJSONでのレスポンス返却を試す。
1.ファイルのアップロード Vuetify側
https://serversideup.net/uploading-files-vuejs-axios/
を参考に、ファイルアップロードのサンプルを実装。
1.1 画面
<input @change="handleFileUpload" type="file" id="file" ref="file"> <v-btn @click="submitFile">upload</v-btn>
1.2 送信スクリプト
処理結果で得られたJSONが、すでにJavascriptのオブジェクトに変換された状態のため、表示用にJSONに変換する。
import axios from 'axios'; export default { name: 'FavoPhrase', data() { return { file: '', fileName: '' } }, methods: { handleFileUpload: function(e) { this.file = this.$refs.file.files[0]; if (this.file) { this.fileName = this.file.name; } }, submitFile: function() { let formData = new FormData(); formData.append('file', this.file); formData.append('fileName', this.fileName); console.log(formData); axios.post(process.env.VUE_APP_API_BASE_URL + "/api/upload-file", formData, { headers: { 'Content-Type': 'multipart/formdata' } } ).then(function(response){ alert("Success!\n" + JSON.stringify(response.data)); }).catch(function(response){ alert("Faiure!\n" + response); }); } } }
2.サーバー側
- Spring 側で、ファイル自体を MultipartFile、ファイル名を文字列で受け取る
- ファイルを適当に保存(確認用。GAEにデプロイ時には外す)
- Map<String,String> を返却する。いい感じにJSONにしてくれる(任意のオブジェクトでも可)
- Origin仮引数は、開発用のクロスドメイン対応
@PostMapping("/api/upload-file") public ResponseEntity
3.確認
実行して、ファイルをアップロード。
処理が成功して、アラートにJSONが表示された。
めでたし。