m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

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形式で返却できるみたいなので大丈夫かな?

参考

Spring Bootでファイルをアップロードする - かずきのBlog@hatena


終わり
今回はここまで
(そろそろ認証まわり調べてみたい…)