Spring Bootでアップロードファイルを受け取る
FormとかBeanとかいうクラスを使用することで受け取ることが可能になりました。
ファイルってどうするのかな?
MultipartFileとかいうクラス
があれば受け取れます(^^)
フォーム系
SendDataForm.java
package com.example.form; import java.io.Serializable; import org.springframework.web.multipart.MultipartFile; public class SendDataForm implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String id; private String text; private String item_id; private MultipartFile upload_file; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getItem_id() { return item_id; } public void setItem_id(String item_id) { this.item_id = item_id; } public MultipartFile getUpload_file() { return upload_file; } public void setUpload_file(MultipartFile upload_file) { this.upload_file = upload_file; } public String toString(){ String str = ""; str += "id = " + this.id + "\n"; str += "text = " + this.text + "\n"; str += "item_id = " + this.item_id + "\n"; if(null != this.upload_file){ str += "upload_file = " + this.upload_file.getOriginalFilename() + " size = " + this.upload_file.getSize() + "\n"; } return str; } }
Item.java
package com.example.form; import java.io.Serializable; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Item implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String id; private String text; private String item_id; private String upload_file; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getItem_id() { return item_id; } public void setItem_id(String item_id) { this.item_id = item_id; } public String getUpload_file() { return upload_file; } public void setUpload_file(String upload_file) { this.upload_file = upload_file; } }
受信用コントローラー
SampleController.java
package com.example.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.example.form.Item; import com.example.form.SendDataForm; @RestController @RequestMapping("/sample") public class SampleController { @RequestMapping(value = "/upload", method = {RequestMethod.POST}) public Item upload(SendDataForm form){ Item item = new Item(); item.setId(form.getId()); item.setText(form.getText()); item.setItem_id(form.getItem_id()); item.setUpload_file(form.getUpload_file().getOriginalFilename()); return item; } }
実験
$ curl -X POST http://localhost:8080/sample/upload \ > -F "id=100" \ > -F "text=hogehoge" \ > -F "item_id=12345678" \ > -F "upload_file=@work/file/image.jpg" {"id":"100","text":"hogehoge","item_id":"12345678","upload_file":"image.jpg"}
※curlってこういうとき簡単に試せるから便利(^^)
MultipartFileの中でファイルの名前やサイズ、データも管理できるみたいなので結構便利な感じ
フォームで送信する形式になるのでヘッダーにjsonとかは設定できないんですね…なんかその辺まだ良くわかっていない(´・ω・`)
まあ、json形式で返却できるみたいなので大丈夫かな?