Servletでアップロード
今回はテキストファイルのアップロードをやります。以前は外部ライブラリを使用する方法が一般的でしたが、Servlet 3.0からライブラリを使用しなくても簡単に処理できるようになりました。
プロジェクト作成は こちらを参考にして下さい。。
サーブレット
POSTに@MultipartConfigアノテーションを付けるとアップロードファイルを受け取れるようになります。
package servlet.test;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/Upload")
@MultipartConfig(maxFileSize = 20971520, maxRequestSize = 20971520, fileSizeThreshold = 1048576, location = "C:\\tmp")
public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF8");
response.setContentType("text/html; charset=UTF8");
Collection<Part> parts = request.getParts();
for (Part part : parts) {
// uploadfileが出力される
System.out.println(part.getName());
// アップロードファイル名が取得される
String name = getFileName(part);
if (name != null && name.length() > 0) {
part.write(name);
response.getWriter().append("アップロード:").append(name);
}
}
}
private String getFileName(Part part) {
for (String cd : part.getHeader("Content-Disposition").split(";")) {
String str = cd.trim();
if (str.startsWith("filename")) {
String str2 = str.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
File f = new File(str2);
return f.getName();
}
}
return null;
}
}
Jsp
upload.jsp という名前でJspファイルを作成します。
<%@ page language="java" contentType="text/html; charset=UTF8"
pageEncoding="UTF8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>アップロード</title>
</head>
<body>
<FORM action="/test/Upload" enctype="multipart/form-data" method="POST">
アップロード<BR />
<INPUT type="file" name="uploadfile" /> <INPUT type="submit" />
</FORM>
</body>
</html>
実行
http://localhost:8080/test/upload.jsp にアクセスすると実行できます。ページのトップへ戻る