servlet实现SmartUpload文件上传下载
- 什么是SmartUpload?
SmartUpload组件是应用JSP进行B/S程序开发过程中经常使用的上传下载组件,它使用简单,方便。
使用方法
准备:
1.下载架包:
jspSmartUpload.jar 下载 2. 使用架包
新建一个项目
把架包放入lib目录下:
?接下来是正式使用了
1.文件上传:
编写前端页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="smartUploadUpServlet" method="post" enctype="multipart/form-data">
上传文件1:<input type="file" name="file1" ><br>
上传文件2:<input type="file" name="file2" ><br>
上传文件3:<input type="file" name="file3" ><br>
<input type="submit" value="上传">${result }
</form>
</body>
</html>
servlet
package com.yimocha.servlet;
import java.io.File;
import java.io.IOException;
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 com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
/**
* Servlet implementation class SmartUploadUpServlet
*/
@WebServlet("/smartUploadUpServlet")
public class SmartUploadUpServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置上传文件保存路径
String filePath = "E:\\img";
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs(); // 创建文件路径
}
SmartUpload sUpload = new SmartUpload(); // 创建文件上传对象
sUpload.initialize(getServletConfig(), request, response); // 初始化SmartUpload对象
sUpload.setMaxFileSize(1024*1024*10); // 设置单个文件上传大小
sUpload.setTotalMaxFileSize(1024*1024*100); // 设置总上传文件大小
sUpload.setAllowedFilesList("jpg,png,txt"); // 设置允许上传文件类型
String result = "上传成功! ";
try {
sUpload.upload(); // 上传文件
// 保存文件到指定目录-并返回保存数量
int count = sUpload.save(filePath);
result += count + "个文件!";
System.out.println("上传成功!" + count + "个文件!");
} catch (SmartUploadException e) {
result = "上传失败! ";
if (e.getMessage().indexOf("1015") != -1) { // 允许上传文件文件类型
result = "上传失败:上传文件类型不正确! ";
} else if (e.getMessage().indexOf("1010") != -1) { // 不允许上传文件类型
result = "上传失败:上传文件类型不正确! ";
} else if (e.getMessage().indexOf("1105") != -1) { // 上传文件的大小
result = "上传失败:上传文件大小大于允许上传的最大值! ";
} else if (e.getMessage().indexOf("1110") != -1) { // 上传文件总大小
result = "上传失败:上传文件总大小大于允许上传的最大值! ";
}
e.printStackTrace();
}
for (int i = 0; i < sUpload.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = sUpload.getFiles().getFile(i);
System.out.println("---------------------------");
System.out.println("表单中name的值:" + tempFile.getFieldName());
System.out.println("上传文件名:" + tempFile.getFileName());
System.out.println("上传文件的大小:" + tempFile.getSize());
System.out.println("上传文件的拓展名:" + tempFile.getFileExt());
System.out.println("上传文件的全名:" + tempFile.getFilePathName());
}
request.setAttribute("result", result);
request.getRequestDispatcher("upload01.jsp").forward(request, response);
}
}
运行结果:
1.选择图片
2.上传
3.上传成功,查看目录
2.单文件下载:
编写前端页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>单文件下载</title>
</head>
<body>
下载:<a href="smartUploadDownloadServlet?filename=01.jpg">01.jpg</a>
</body>
</html>
servlet
package com.yimocha.servlet;
import java.io.IOException;
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 com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
/**
* Servlet implementation class SmartUploadDownloadServlet
*/
@WebServlet("/smartUploadDownloadServlet")
public class SmartUploadDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("filename"); // 获取要下载的文件名
String downloadPath = "E:\\img\\"; // 下载路径
SmartUpload sUpload = new SmartUpload(); // 实例化SmartUpload对象
sUpload.initialize(getServletConfig(), request, response); // 初始化SmartUpload对象
sUpload.setContentDisposition(null); // 使用浏览器下载方式
try {
sUpload.downloadFile(downloadPath+filename); // 下载文件
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
1.下载
2.查看是否下载成功----下载成功!
4.多文件打包下载:
编写前端页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>多文件打包下载</title>
</head>
<body>
<h1>多文件打包下载</h1>
<form action="BatchDownloadServlet" method="post">
<input type="checkbox" name="filename" value="01.jpg">01.jpg
<input type="checkbox" name="filename" value="02.jpg">02.jpg
<input type="checkbox" name="filename" value="03.jpg">03.jpg<br>
<input type="submit" value="下载">
</form>
</body>
</html>
servlet
package com.yimocha.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class BatchDownloadServlet
*/
@WebServlet("/BatchDownloadServlet")
public class BatchDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应头
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=download.zip");
String path = "E:\\img\\"; // 下载路径
String[] filenames = request.getParameterValues("filename"); // 获取要下载的文件数组
String str = "";
String rt = "\r\n";
// 获取zip打包对象 响应到response输出流中
ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
for (String filename : filenames) {
str += filename + rt;
File file = new File(path + filename); // 获得文件
zipOutputStream.putNextEntry(new ZipEntry(filename)); // 设置要压缩的下一个文件名条目
FileInputStream fis = new FileInputStream(file); // 读取需要下载的文件内容
byte[] b = new byte[1024]; // 循环读取, 每次读取1024个字节
int n = 0;
while ((n = fis.read(b)) != -1) {
zipOutputStream.write(b, 0, n); // 将文件写入zip
}
zipOutputStream.flush();
fis.close();
}
zipOutputStream.setComment("download success:" + rt + str);
zipOutputStream.flush();
zipOutputStream.close();
}
}
运行结果:
1.下载
2.下载成功
项目目录结构:
SmartUpload的常用实用方法:
try {
// 设置不允许上传文件的类型
sUpload.setDeniedFilesList("jsp,js");
// 上传文件
sUpload.upload();
// 保存文件
int count = sUpload.save(filePath);
System.out.println("上传成功" + count + "个文件!");
} catch (Exception e) {
// TODO Auto-generated catch block
result = " 上传失败! ";
if (e.getMessage().indexOf("1015") != -1) { // 允许上传文件文件类型
result = "上传失败:上传文件类型不正确! ";
} else if (e.getMessage().indexOf("1010") != -1) { // 不允许上传文件类型
result = "上传失败:上传文件类型不正确! ";
} else if (e.getMessage().indexOf("1105") != -1) { // 上传文件的大小
result = "上传失败:上传文件大小大于允许上传的最大值! ";
} else if (e.getMessage().indexOf("1110") != -1) { // 上传文件总大小
result = "上传失败:上传文件总大小大于允许上传的最大值! ";
}
e.printStackTrace();
}
exception:
1. e.getMessage().indexOf(“1015”)
// 允许上传文件文件
2. e.getMessage().indexOf(“1010”)
// 不允许上传文件类型
3. e.getMessage().indexOf(“1105”)
// 上传文件的大小
4. e.getMessage().indexOf(“1110”)
// 上传文件总大小
获取上传文件信息
for (int i = 0; i < sUpload.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = sUpload.getFiles().getFile(i);
System.out.println("---------------------------");
System.out.println("表单中name的值:" + tempFile.getFieldName());
System.out.println("上传文件名:" + tempFile.getFileName());
System.out.println("上传文件的大小:" + tempFile.getSize());
System.out.println("上传文件的拓展名:" + tempFile.getFileExt());
System.out.println("上传文件的全名:" + tempFile.getFilePathName());
}
- tempFile.getFieldName(); 表单中name的值
- tempFile.getFileName()); 上传文件名
- tempFile.getSize()); 上传文件的大小
- tempFile.getFileExt()); 上传文件的拓展名
- tempFile.getFilePathName()); 上传文件的全名