「Java/Tomcat/ファイルをアップロードするサンプル(Commons FileUplaod)」の編集履歴(バックアップ)一覧に戻る
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- サーブレットの宣言 -->
<servlet>
<servlet-name>FileUploadSample</servlet-name>
<servlet-class>FileUploadSample</servlet-class>
</servlet>
<!-- サーブレットとurlのマッピング -->
<servlet-mapping>
<servlet-name>FileUploadSample</servlet-name>
<url-pattern>/up</url-pattern>
</servlet-mapping>
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>[Tomcat] ファイルアップロードサンプル。</title>
</head>
<body>
<h1>[Tomcat] ファイルアップロードサンプル。</h1>
<form method="POST" enctype="multipart/form-data" action="up">
ファイル : <input type="file" name="upfile"><br/>
メモ : <input type="text" name="note"><br/>
<br/>
<input type="submit" value="Press"> ファイルをアップロードします!
</form>
</body>
</html>
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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;
/**
* [Tomcat] ファイルアップロードサンプル。
*/
public class FileUploadSample extends HttpServlet {
// (1) ファイルアップロードする時は、doPostメソッドを使います。
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// (2) アップロードファイルを受け取る準備
// ディスク領域を利用するアイテムファクトリーを作成
DiskFileItemFactory factory = new DiskFileItemFactory();
// tempディレクトリをアイテムファクトリーの一次領域に設定
ServletContext servletContext = this.getServletConfig().getServletContext();
factory.setRepository((File) servletContext.getAttribute("javax.servlet.context.tempdir"));
// ServletFileUploadを作成
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// (3) リクエストをファイルアイテムのリストに変換
List<FileItem> items = upload.parseRequest(request);
// アップロードパス取得
String upPath = servletContext.getRealPath("/") + "upload/";
byte[] buff = new byte[1024];
int size = 0;
for (FileItem item : items) {
// (4) アップロードファイルの処理
if (!item.isFormField()) {
// ファイルをuploadディレクトリに保存
BufferedInputStream in = new BufferedInputStream(item.getInputStream());
File f = new File(upPath + item.getName());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
while ((size = in.read(buff)) > 0) {
out.write(buff, 0, size);
}
out.close();
in.close();
// アップロードしたファイルへのリンクを表示
response.getWriter().print("<a href='");
response.getWriter().print(servletContext.getContextPath() + "/upload/" + item.getName());
response.getWriter().print("'>" + item.getName() + "</a>");
// (5) フォームフィールド(ファイル以外)の処理
} else {
// ここでは処理せず、直接requestからgetParamしてもいいと思います。
}
}
} catch (FileUploadException e) {
// 例外処理
}
response.getWriter().flush();
}
}