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

asaのブログ

プログラミングの勉強まとめ

アップローダの作成(サーバーサイド編終了)

 サーバーサイド編終わりました。約1ヶ月に渡ってあの分厚い参考書をバッグに入れて持ち運んでいた時期が懐かしく思えます。それももう終わり…やっと最後のiTextまで打ち込みが終わりました。

 

 いろいろとコードを書きましたが、とりあえず使えそうなものを紹介しようと思います。今回はクライエント側にあるファイルをサーバーにアップロードするアップローダーを説明します。

 

 参考書はもちろんこれ。こいつもついに見納めです。

独習Javaサーバサイド編

独習Javaサーバサイド編

 

 

 アップローダーの概要

 ここでは外部ライブラリのCommonsFileUploadを使用しています。Apacheほんとにありがとう。それでファイルのアップロードの流れは、アップロードのための前準備、アップロードファイルの取得、アップロードファイルの保存の3段階で進みます。

 

 アップロードの前準備

 まず、アップロードの前準備をします。アップロードを行うクラスはServletFileUploadクラスの役割です。なのでまず最初にこのクラスのインスタンスuploadを作成することを頭においておきます。

 

 ServletFileUploadクラスのコンストラクタはDiskFileItemFactoryを要求します。そこでクラスのインスタンスfactoryを作ります。DiskFileItemFactoryはその名のとおり、アップロードファイルをいろいろと加工して扱いやすくするセッタメソッドが存在します。作成したインスタンスからメソッドを呼び出して、最低限の設定をしておきます。

 

 アップロードファイルのいろいろな扱いをこうしてfactoryインスタンスに詰め込んで、これをuploadインスタンスに渡します。こうして無事にアップロードの前準備が終わります。

 

 アップロードファイルの取得

 さて、そうしてアップロードファイルがPOSTされると、それはrequestオブジェクトに入れ込まれて処理に回ってきます。この中には目的のアップロードファイルに混じっていろいろなオブジェクトが混じっています。

 

 まずはそれをまとめて、Listに入れ込みます。その役割はparseRequestメソッドです。requestオブジェクトを渡すと、FileItemオブジェクトのリストで返してくれます。

 

 目的のファイルをリストから見つけるためにIteratorをつけます。IteratorのメソッドhasNextを使ってfalseを返すまでリストの中を探索していきます。あとファイルであればtrueなりfalseを返すメソッドがあったらいいなと思いますね。それがisFormFieldメソッドです。テキストであればtrueを返すので、falseの場合にはファイルを保存する処理を行います。

 

 アップロードファイルの保存

 目的のファイルが見つかったところで、まずパス名を取得します。パス名がなかったりnullだったりしなければ保存処理に移ります。次にFileオブジェクトを作って、getNameでファイル名だけ取得します。保存したいpathはweb.xmlであらかじめ記述しているのでpath+ファイル名で指定したpathにファイルをwriteメソッドで書き込み(保存)します。

 

 コード

gist664621a8d54d0b7d5f765a8073be5aa3

 

gist0514f59aaf9a287e331f443855c1450d

 

gist1e183ff6f12d186c48bf30df17b242e5

 

終わり!