ファイルアップロードの最大サイズ指定
久々のエントリです。
過去のエントリで
あと、セキュリティ面からアップロードファイルのサイズ制限などの設定は必須ですが、アノテーションでしか指定出来ないのは困ります。
今回調査したJSFのように、既存フレームワークとの連携が非常にやりにくくなりますし、サイズ制限が異なるだけの処理にわざわざServletを個別に作らなければいけません。
例えばweb.xmlでも設定出来るようにする、などの逃げ道がほしかったです。
http://d.hatena.ne.jp/jabaraster/20110330/1301466968
などと書いていましたが、ちょっと気になって調べてみたらweb.xmlでも設定出来ることが分かりました。
web.xmlでアップロードファイルの最大サイズを指定する
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>sandbox.server.UploadServlet</servlet-class> <multipart-config> <location>/tmp</location> <max-file-size>1</max-file-size> <max-request-size>10</max-request-size> <file-size-threshold>1</file-size-threshold> </multipart-config> </servlet>
そのまますぎです。
なんでもっと早く調べなかったのか。
コードからアップロードファイルの最大サイズを指定する
Servlet3.0ではweb.xmlで設定出来ることの多く(全て?)がコードからも設定可能です。
ということは、アップロードファイルの最大サイズももしかして・・・と調べたらやっぱり出来ました。
例えばこんな↓感じです。
@WebListener public class ServletRegisterer implements ServletContextListener { @Override public void contextDestroyed(final ServletContextEvent pSce) { // } @Override public void contextInitialized(final ServletContextEvent pSce) { final ServletContext ctx = pSce.getServletContext(); final Dynamic d1 = ctx.addServlet("upload1", UploadServlet.class); d1.addMapping("/upload1"); d1.setMultipartConfig(new MultipartConfigElement("", 1, 20, 0)); } }
maxFileSizeが効かない
今回の調査の過程maxFileSizeが効かないという現象に会っています。
なんでかな・・・
なんか設定の仕方をかんちがいしているのかもしれません。