servletアップロードファイルのコードの詳細(4)
本論文の例では、servletアップロードファイルの具体的なコードを共有します。
1.servletアップロードファイル
servletアップロードファイルはクライアントのファイルをサーバにアップロードすることです。
サーバにデータを送信する際、クライアントから送信されたhttp要求本文は「multiiprt/form-data」のデータタイプを採用し、複雑な複数のサブ部分の複合フォームを表しています。
「multiipad/form-data」データの処理を簡略化するために。Apache組織が提供する2つのオープンソースパッケージを使ってアップロードが可能です。
fileupladパッケージ(commons-fileuplad-2.1.jar)は、ファイルアップロードのパッケージを担当しています。
ioパッケージ(commons-i-to-1.4.jar)は、入出力のパッケージを担当しています。
2.servletアップロードファイル関連クラス
2.1 fileupladソフトウェアパッケージは、要求本文に含まれる複合フォームの各サブ部分をFileItemオブジェクトとみなす。FileItemオブジェクトは2種類に分けられます。
(1)フォーム内のテキストやボタンなどの一般的なフォームドメインタイプ。
(2)非formFiled:アップロードファイルタイプで、フォームのファイル領域はこのタイプです。
2.2 FileItem FactoryインターフェースとFileItemインターフェース
FileItem FactoryはFileItem対象の工場です。
Disc FileItem FactoryはFileItem Factoryインターフェースを実現し、Disc FileItem FactoryはDisck FileItemオブジェクトを作成するために使用されます。
Disk FileItemオブジェクトは、クライアントからアップロードされたファイルをクライアントに保存するために使用されます。
2.3 Servlet FileUpload類
Servlet FileUploadはファイルアップロードプロセッサです。Disc FileItem Factoryオブジェクトと関連付けられています。
3.ファイルアップロードの実例
ファイルページをアップロードします(uplload)
1.servletアップロードファイル
servletアップロードファイルはクライアントのファイルをサーバにアップロードすることです。
サーバにデータを送信する際、クライアントから送信されたhttp要求本文は「multiiprt/form-data」のデータタイプを採用し、複雑な複数のサブ部分の複合フォームを表しています。
「multiipad/form-data」データの処理を簡略化するために。Apache組織が提供する2つのオープンソースパッケージを使ってアップロードが可能です。
fileupladパッケージ(commons-fileuplad-2.1.jar)は、ファイルアップロードのパッケージを担当しています。
ioパッケージ(commons-i-to-1.4.jar)は、入出力のパッケージを担当しています。
2.servletアップロードファイル関連クラス
2.1 fileupladソフトウェアパッケージは、要求本文に含まれる複合フォームの各サブ部分をFileItemオブジェクトとみなす。FileItemオブジェクトは2種類に分けられます。
(1)フォーム内のテキストやボタンなどの一般的なフォームドメインタイプ。
(2)非formFiled:アップロードファイルタイプで、フォームのファイル領域はこのタイプです。
2.2 FileItem FactoryインターフェースとFileItemインターフェース
FileItem FactoryはFileItem対象の工場です。
Disc FileItem FactoryはFileItem Factoryインターフェースを実現し、Disc FileItem FactoryはDisck FileItemオブジェクトを作成するために使用されます。
Disk FileItemオブジェクトは、クライアントからアップロードされたファイルをクライアントに保存するために使用されます。
2.3 Servlet FileUpload類
Servlet FileUploadはファイルアップロードプロセッサです。Disc FileItem Factoryオブジェクトと関連付けられています。
3.ファイルアップロードの実例
ファイルページをアップロードします(uplload)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="POST">
<input name="username" size="30">
<input type="file" name="file1" size="30">
<input type="file" name="file2" size="30">
<input type="submit" name="submit" value="upload">
</form>
</body>
</html>
アップロードファイルのservletクラス
package com.learn;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.common.usermodel.LineStyle;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
public class ServletUpload extends HttpServlet {
private String filePath;
private String tempFilePath;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//
filePath = config.getInitParameter("filePath");
tempFilePath = config.getInitParameter("tempFilePath");
System.out.println("init filepath:"+filePath);
System.out.println("tempFilePath:"+tempFilePath);
//
filePath = config.getServletContext().getRealPath(filePath);
tempFilePath = config.getServletContext().getRealPath(tempFilePath);
System.out.println("realPath:"+filePath);
System.out.println("tempFilePath"+tempFilePath);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
//
resp.setContentType("text/plain");
resp.setCharacterEncoding("UTF-8");
//
PrintWriter out = resp.getWriter();
// FileItem
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// , 4k
diskFileItemFactory.setSizeThreshold(4*1024);
//
diskFileItemFactory.setRepository(new File(tempFilePath));
//
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//
servletFileUpload.setSizeMax(4*1024*1024);
//
try {
//
List list = servletFileUpload.parseRequest(req);
//
Iterator iterator = list.iterator();
//
while(iterator.hasNext()){
// FileItem
FileItem fileItem = (FileItem) iterator.next();
if(fileItem.isFormField()){
System.out.println(" ");
processFormFiled(fileItem,out);
} else {
System.out.println(" ");
processUploadFile( fileItem,out);
}
}
System.out.println(" ");
out.close();
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void processFormFiled(FileItem fileItem,PrintWriter printWriter){
//
String name = fileItem.getName();
//
String value = fileItem.getString();
printWriter.print("name:"+name+"value:"+value);
}
private void processUploadFile(FileItem fileItem,PrintWriter printWriter) throws Exception {
//
String fileName = fileItem.getName();
int i = fileName.lastIndexOf("\\");
fileName = fileName.substring(i+1,fileName.length());
//
long fileSize = fileItem.getSize();
System.out.println("fileName:"+fileName+"| fileSize:"+fileSize);
if("".equals(fileName) && fileSize == 0)
return;
//
File upload = new File(filePath+File.separator+fileName);
fileItem.write(upload);
//
printWriter.print(fileName+"is saved");
System.out.println(" ");
printWriter.print("the size of "+fileName+" is "+fileSize);
}
}
3.web.xml配置
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>com.learn.ServletUpload</servlet-class>
<init-param>
<param-name>filePath</param-name>
<param-value>file</param-value>
</init-param>
<init-param>
<param-name>tempFilePath</param-name>
<param-value>temp</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。