大容量ファイルのアップロード
DEXTUploadJKで2GB以上のサイズを持つファイルをアップロードすることを「大容量ファイルアップロード」と命名する。 DEXTUploadJKは、DEXTUploadX5(HTML5ベース)などの自社コンポーネント製品と組み合わせて使用して、大容量ファイルのアップロードを処理する機能を提供します。(大容量ファイルのアップロードは、自社のコンポーネントと連動した場合のみ可能であり、DEXTUploadJK単独ではサポートしない。)
大容量ファイルのアップロードは、一般的なファイルのアップロードとは処理方法が異なります。 一般的なファイルアップロードではファイル10個を送信するために1回の要求で10個すべて送信することができるが、大容量ファイルアップロードでは状況に応じて少なくとも20回から数千回の要求をサーバに送信することもある。 DEXTUploadJKの大容量ファイルアップロード機能は基本的に持ち上げをサポートしているため、製品が事前にサーバーとの通信を行う過程が発生し、ファイルを分割して転送するために分けられたサイズ(チャンク)によって要求数が増加する。 。 たとえば、2.5 GBのサイズのファイルを10個アップロードしたとします。 しかしDEXTUploadJKは、分割されたファイルを一つにまとめる作業を完全に知って処理しているため、開発者は宛先にファイルを保存(エスカレーション)する作業だけで合計10回程度処理してもらえばよい。
大容量ファイルアップロード機能は、JKExtensionUploadFilterクラスが完全に担当する。 このクラスはフィルタクラスなので、Javaサーブレットコンテナ(Tomcatなど)によって自動的にロードされ、コードレベルの生成や呼び出しなしで大容量ファイルのアップロードを処理します。
次はDD(web.xml)で JKExtensionUploadFilter を設定する方法です。
# web.xml
<filter>
<filter-name>extensionUploadFilter</filter-name>
<filter-class>dextuploadjk.support.common.JKExtensionUploadFilter</filter-class>
<!-- 設定パラメータの省略 -->
</filter>
<filter-mapping>
<filter-name>extensionUploadFilter</filter-name>
<!--
大容量アップロードが処理されることを望むサーブレットまたはURLをマッピングします。
<servlet-name>Serlvet name</servlet-name>
<url-pattern>URL mapping</url-pattern>
-->
</filter-mapping>
- サーブレットまたはJSP環境の場合
-
JKExtensionUploadFilterフィルタを介して処理された一時ファイルをサーブレットまたはJSPでFileUploadクラスを使用して処理できます あります。
FileUpload fileUpload = null; try { fileUpload = new FileUpload(request); fileUpload.prepare(); FileItem item = fileUpload.getFileItem(); if (item.isEmpty()) { // ファイルが空の場合、通常は例外を発生させる必要があります。 } String path = item.save(); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain"); response.getWriter().write(path); } finally { if (dextnj != null) dextnj.close(); } - Spring MVC環境の場合
-
Spring環境では、DD(web.xml)でJKExtensionUploadFilterの代わりに JKSpringExtensionUploadFilter を設定できます。
DispatcherServletの設定を担当するXMLファイルからJKMultipartResolverの設定を省略してもよい。
# web.xml <filter> <filter-name>extensionUploadFilter</filter-name> <filter-class>dextuploadjk.support.spring.JKSpringExtensionUploadFilter</filter-class> <!-- 設定パラメータの省略 --> </filter> <filter-mapping> <filter-name>extensionUploadFilter</filter-name> <!-- 大容量アップロードが処理されることを望むサーブレットまたはURLをマッピングします。 <servlet-name>Serlvet name</servlet-name> <url-pattern>URL mapping</url-pattern> --> </filter-mapping>JKSpringExtensionUploadFilterフィルタで処理された一時ファイル情報は、ControllerにマップされたメソッドからMultipartFileパラメータとして受け取ることができます。 、このオブジェクトをFileItemインターフェイスにキャストして最終的な保存操作を実行できます。
@RequestMapping(value = "/upload-extension.do", method = RequestMethod.POST) public void upload( // DEXTUploadX5製品の場合、'DEXTUploadX5_FileData'という名前で渡されます。 @RequestParam(value = "DEXTUploadX5_FileData") MultipartFile file, HttpServletResponse response) throws IOException { // FileItem インターフェイスにキャストします。 FileItem item = (FileItem)file; if (item.isEmpty()) { // ファイルが空の場合、通常は例外を発生させる必要があります。 // DEXTUploadX5は、ファイルのない要求をサーバーに送信しないためです。 } String path = item.save(); response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain"); response.getWriter().write(path); } - Spring Bootの場合
-
Spring Bootでは、JKSpringExtensionUploadFilterをBeanとして登録できます。
@Bean public FilterRegistrationBean<JKSpringExtensionUploadFilter> filterRegistrationBean(ServletContext context) { FilterRegistrationBean<JKSpringExtensionUploadFilter> fb = new FilterRegistrationBean<JKSpringExtensionUploadFilter>(); fb.addInitParameter("tempRepository", "/files/temp"); fb.addInitParameter("defaultRepository", "/files/store"); fb.addInitParameter("autoMakingDirectory", "true"); fb.addInitParameter("enableCleaner", "true"); ... fb.setFilter(new JKSpringExtensionUploadFilter()); // upload-extension: Extension file-upload mapping path fb.addUrlPatterns("/upload-extension"); return fb; }フィルタが設定されたら、その後はSpring MVC環境のようにコントローラのマッピングメソッドで一時ファイルを処理してください。