読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Srping MVC 画像ファイルを処理する

開発日記
<スポンサーリンク>

Apache上にあるHTMLから、画像ファイルを送信して、Spring MVCで受け取ってディレクトリに格納するサンプルを作っています。
もともと、友達と旅行に行くときの「旅のしおり」を作っていたんですけど、そこに写真を載っけたい・・・と言い出されたことがきっかけです。

勉強がてらやってますけど、やっぱりコードを書くのは楽しいですね。
一日中、仕事でもコードを書きまくれたらどんなに楽しいことか。

俺はこの楽しいって純粋な気持ちを、今の生活を守るために犠牲にしているのかもしれない。
自分の心に素直になって、つまらないものはつまらないと言える勇気と、力を。

そのための準備を、2年間でする計画です。


さて、Spring MVCのコントローラ側にこんな感じで書けば、HTTP POSTで送られた画像ファイルを処理することができます。
画像ファイルをDaoに渡して、それを保存するって感じですね。

とりあえず、画像を保存して、そのファイルの位置をJSONで返せるようになったらから、あとはブラウザ側でそれを読み込んで表示するところですね。
てゆうか、こういうのをRailsでサクッと書けるようになりたいな。
快適なレールに憧れるわ。

@RequestMapping(value = "img_save", method=RequestMethod.POST)
public @ResponseBody Image saveProduct(HttpServletRequest request,
				@RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {

	ImageDao dao = imageService.getImageDao();
	Image image = dao.save(file);		
	return image;
}

DBに保存するか、ファイルに保存するかはDAOに任せるようにしています。
今回はファイルに保存していますが。
保存先のディレクトリはDIしています。

public Image save(MultipartFile imageFile) {
	Image image = new Image();
	
	Date postDate = new Date();
	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
	String dateStr = sdf.format(postDate);
	
	
	if (imageFile.getSize() > 0) {
		String imageFileName = dateStr + "_" +imageFile.getOriginalFilename();
		
		image.setName(imageFileName);
		image.setSize(imageFile.getSize());
		image.setPostDate(postDate);
		image.setUrl(imageAbsoluteSaveDir + imageFileName);
		
		//本来はこのimageをDBにつっこむけど、今回は実装しない
		
		File file = new File(imageSaveDir, imageFileName);
		if (!file.exists()) {
			File dir = new File(imageSaveDir);
			dir.mkdir();
		}
		try {
			imageFile.transferTo(file);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	return image;
}

この辺を詳しく見たい人は、(あまりいないと思いますが)別ブログの方を見ていただければと思います。
長くなりそうなコードはこっちにまとめるようにしました。

Spring MVC HTTPで送られてきた画像ファイルを特定のディレクトリに保存する


スッキリわかるJava入門 実践編

スッキリわかるJava入門 実践編

本屋で立ち読みしたこの本が気になっている。
でも、だいぶ知ってることが多かったなぁ。