Jsp+Servletはファイルアップロードを実現してファイルをダウンロードしてアップロードする(一)
ファイルアップロードとダウンロード機能はJava Webに必要な技能で、とても実用的です。
この文章はApacheの有名なファイルアップロードコンポーネントを使用しています。
org.apache.com mmons.fileupladを実現します。
最近見た資料と自分の試みを合わせて、まず最初のファイルを書いてアップロードします。その後はダウンロード、展示ファイルリスト、アップロード情報の持続化などが徐々に実現されます。
むだ話はもちろん、直接コードをかけます。
第一歩、jarパッケージを参照して、アップロードディレクトリを設定します。
commons-fileuplload-1.3.1.jar
commons-to-244.jar
アップロードディレクトリ:WEB-INF/tempFilesとWEB-INF/uplloadFiles
第二ステップ、JSPページの作成
http://localhost:8080/helloweb/pages/upload/upload.jsp
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
この文章はApacheの有名なファイルアップロードコンポーネントを使用しています。
org.apache.com mmons.fileupladを実現します。
最近見た資料と自分の試みを合わせて、まず最初のファイルを書いてアップロードします。その後はダウンロード、展示ファイルリスト、アップロード情報の持続化などが徐々に実現されます。
むだ話はもちろん、直接コードをかけます。
第一歩、jarパッケージを参照して、アップロードディレクトリを設定します。
commons-fileuplload-1.3.1.jar
commons-to-244.jar
アップロードディレクトリ:WEB-INF/tempFilesとWEB-INF/uplloadFiles
第二ステップ、JSPページの作成
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title> </title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="<%=request.getContextPath()%>/UploadServlet">
: <input type="file" name="upfile"><br/>
<br/>
<input type="submit" value=" ">
</form>
<c:if test="${not empty errorMessage}">
<input type="text" id="errorMessage" value="${errorMessage}" style="color:red;" disabled="disabled">
</c:if>
</body>
</html>
第三段階、Servletを作成し、ファイルアップロードの核心を処理する。
package servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
/**
*
*
* @author xusucheng
* @create 2017-12-27
**/
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//
String savePath = this.getServletContext().getRealPath("/WEB-INF/uploadFiles");
//
String tempPath = this.getServletContext().getRealPath("/WEB-INF/tempFiles");
File tempFile = new File(tempPath);
if (!tempFile.exists()) {
tempFile.mkdir();
}
//
String errorMessage = "";
// file items
DiskFileItemFactory factory = new DiskFileItemFactory();
//
factory.setSizeThreshold(1024 * 100);
//
factory.setRepository(tempFile);
//
ServletFileUpload upload = new ServletFileUpload(factory);
//
ProgressListener progressListener = new ProgressListener() {
public void update(long pBytesRead, long pContentLength, int pItems) {
System.out.println(" : " + pItems);
if (pContentLength == -1) {
System.out.println(" : " + pBytesRead + " 0");
} else {
System.out.println(" :" + pContentLength + " :" + pBytesRead);
}
}
};
upload.setProgressListener(progressListener);
//
upload.setHeaderEncoding("UTF-8");
//
if (!ServletFileUpload.isMultipartContent(request)) {
//
return;
}
// , 1024*1024 , 1MB
upload.setFileSizeMax(1024 * 1024);
// , = , 10MB
upload.setSizeMax(1024 * 1024 * 10);
try {
// ServletFileUpload , List<FileItem> , FileItem Form
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = iterator.next();
// jsp
if (item.isFormField()) {
errorMessage = " !";
break;
} else {
//
String fileName = item.getName();
if (fileName == null || fileName.trim() == "") {
System.out.println(" !");
}
//
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
//
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
//
if (!validExtension(fileExtension)) {
errorMessage = " !";
item.delete();
break;
}
//
InputStream in = item.getInputStream();
//
String saveFileName = createFileName(fileName);
//
String realFilePath = createRealFilePath(savePath, saveFileName);
//
FileOutputStream out = new FileOutputStream(realFilePath);
//
byte buffer[] = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
//
out.write(buffer, 0, len);
}
//
in.close();
//
out.close();
// TODO
item.delete();
// TODO
}
}
} catch (FileUploadBase.FileSizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("errorMessage", " !!!");
request.getRequestDispatcher("pages/upload/upload.jsp").forward(request, response);
return;
} catch (FileUploadBase.SizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("errorMessage", " !!!");
request.getRequestDispatcher("pages/upload/upload.jsp").forward(request, response);
return;
} catch (FileUploadException e) {
e.printStackTrace();
request.setAttribute("errorMessage", " !!!");
request.getRequestDispatcher("pages/upload/upload.jsp").forward(request, response);
return;
}
request.setAttribute("errorMessage", errorMessage);
request.getRequestDispatcher("pages/upload/upload.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private boolean validExtension(String fileExtension) {
String[] exts = {"jpg", "txt", "doc", "pdf"};
for (int i = 0; i < exts.length; i++) {
if (fileExtension.equals(exts[i])) {
return true;
}
}
return false;
}
private String createFileName(String fileName) {
return UUID.randomUUID().toString() + "_" + fileName;
}
/**
* , \\ \\ \\fileName
*
* @param basePath
* @param fileName
* @return
*/
private String createRealFilePath(String basePath, String fileName) {
Calendar today = Calendar.getInstance();
String year = String.valueOf(today.get(Calendar.YEAR));
String month = String.valueOf(today.get(Calendar.MONTH) + 1);
String upPath = basePath + File.separator + year + File.separator + month + File.separator;
File uploadFolder = new File(upPath);
if (!uploadFolder.exists()) {
uploadFolder.mkdirs();
}
String realFilePath = upPath + fileName;
return realFilePath;
}
}
第四ステップ、テストhttp://localhost:8080/helloweb/pages/upload/upload.jsp
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。