Servlet中的上傳下載文件
一、文件上傳
文件的上傳也是基於表單來完成的,表單中的file元素可以自動生成一個文本框和一個按鈕,文本框可以輸入本地文件名或路徑,點擊按鈕則可以打開一個文件選擇框讓用戶選中本地文件。需要注意的是在文件上傳時還必須設置表單的enctype屬性,並將它的值設置為multipart/form-data。
<FORM METHOD="POST" ENCTYPE="multipart/form-data"
ACTION="SmartUpladServlet.do">
<INPUT TYPE="text" name="userName"><br>
<INPUT TYPE="file" NAME="myFile"><br>
<INPUT TYPE="file" NAME="myFile2"><br>
<INPUT TYPE="file" NAME="myFile3"><br>
<INPUT TYPE="SUBMIT" value="上傳">
</FORM>
</body>
這裏使用的是SmartUpload,需要該包。
上傳文件的Servlet
import java.io.File;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
public class SmartUpladServlet extends HttpServlet {
public SmartUpladServlet() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//文件上傳個數
int count = 0;
//文件上傳地址
String filePath = getServletContext().getRealPath("/")+"smartUpload";
//如果文件夾不存在 則創建這個文件夾
File file = new File(filePath);
if(!file.exists())
{
file.mkdir();
}
//初始化對象SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(),request,response);
//設置文件最大容量
su.setMaxFileSize(10*1024*1024);
//設置所有文件最大容量
su.setTotalMaxFileSize(100*1024*1024);
//設置上傳文件類型
su.setAllowedFilesList("rar,txt,jpg,bmp,gif");
try {
//設置禁止上傳的文件類型
su.setDeniedFilesList("jsp,js,html,css");
//上傳文件
su.upload();
System.out.println("userName=" + su.getRequest().getParameter("userName"));
count = su.save(filePath);
}
catch (SQLException e) {
e.printStackTrace();
}
catch (SmartUploadException e) {
e.printStackTrace();
}
for (int i = 0; i < su.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
System.out.println("表單項名稱:" + tempFile.getFieldName());
System.out.println("文件名:" + tempFile.getFileName());
System.out.println("文件長度:" + tempFile.getSize());
System.out.println("文件擴展名:" + tempFile.getFileExt());
System.out.println("文件全名:" + tempFile.getFilePathName());
}
System.out.println("上傳成功!共" + count + "個文件!");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
public void init() throws ServletException {}
}
web.XML文件配置
<servlet><description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>SmartUpladServlet</servlet-name>
<servlet-class>com.kay.servlet.SmartUpladServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SmartUpladServlet</servlet-name>
<url-pattern>/SmartUpladServlet.do</url-pattern>
</servlet-mapping>
二、文件下載
顯示文件夾內所有文件的servlet
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowFileServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "c:/file";
//聲明集合存放目錄下所有文件的文件名
List<String> fileList = new ArrayList<String>();
File folder = new File(path);
//判斷文件夾是否存在並且是否是一個目錄
if(folder.exists() && folder.isDirectory()){
//獲得目錄中所有文件及目錄
File[] files = folder.listFiles();
for (File file : files) {
//如果是文件
if(file.isFile()){
//將文件名放入集合中
fileList.add(file.getName());
}
}
}
request.setAttribute("fileList", fileList);
request.getRequestDispatcher("showfile.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
showfile.jsp
<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>顯示所有文件</title>
</head>
<body>
請選擇您要下載的文件:<br/>
<c:forEach items="${fileList}" var="fileName">
<a href="downLoadServlet?filename=${fileName }">${fileName }</a><br/>
</c:forEach>
</body>
</html>
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "C:/file";
String fileName = request.getParameter("filename");
File file = new File(path + "/" + fileName);
//如果文件存在
if (file.exists()) {
//設置響應類型及響應頭
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename=\""
+ fileName + "\"");
//讀取文件
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] bytes = new byte[1024];
ServletOutputStream outStream = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outStream);
int readLength = 0;
while ((readLength = bis.read(bytes)) != -1) {
bos.write(bytes, 0, readLength);
}
//釋放資源
inputStream.close();
bis.close();
bos.flush();
outStream.close();
bos.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
原帖地址:https://blog.sina.com.cn/s/blog_60f823dd01017nz9.html
最後更新:2017-04-04 07:03:53