文章目录
一、前提准备
1. 添加jspSmartUpload.jar
这个jar包在maven repository 仓库里是找不到,需要自己从本地添加。你需要在WEB-INF下创建lib文件夹,然后把jar包复制到lib文件夹下。之后再在pom.xml下添加如下依赖:
<!--文件上传下载的依赖-->
<dependency>
<groupId>jspSmartUpload</groupId>
<artifactId>jspSmartUpload</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jspSmartUpload.jar</systemPath>
</dependency>
在网上查的其他人上传下载用的是SmartUpload.jar,但配置是一样的,我猜应该只是文件名字不同。
二、上传下载的实现
1. Register.jsp
这里需要注意的是文件上传下载是表单需要 enctype="multipart/form-data"
。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="${pageContext.request.contextPath}" var="path"></c:set>
<html>
<head>
<title>Title</title>
</head>
<body>
<div>
<label>用户名</label>
<input type="text" name="uname">
</div>
<form action="${path}/RegisterServlet" method="post" enctype="multipart/form-data">
<div>
<label>选择图片</label><br><br>
<input type="file" name="img1">
<input type="file" name="img2">
<input type="file" name="img3">
</div><br>
<input type="submit" value="上传">
</form>
</body>
</html>
2. UploadServlet
文件上传代码
package com.servlet;
import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "RegisterServlet", value = "/RegisterServlet")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(), request, response);
su.setMaxFileSize(1024 * 1024 * 5);
su.setAllowedFilesList("jpg,gif,bmp,png");
String path = "D:/upload";
List<String> fileNames = new ArrayList<>();
try {
su.upload();
int count = su.getFiles().getCount();
for (int i=0; i < count; i++) {
File file = su.getFiles().getFile(i);
if (file.getSize() == 0) {
continue;
}
file.saveAs(path + "/" + file.getFileName());
fileNames.add(file.getFileName());
}
} catch (SmartUploadException e) {
e.printStackTrace();
}
System.out.println("图片上传成功!");
request.setAttribute("fileNames", fileNames);
request.getRequestDispatcher("Success.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3. Success.jsp
访问成功后,需要显示文件的图片和文件的下载地址。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="${pageContext.request.contextPath}" var="path"></c:set>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:forEach items="${fileNames}" var="fileName">
<img alt="${fileName}" src="D:/upload/${fileName}">
<h1>${fileName}</h1>
<a href="${path}/LoadServlet?fileName=${fileName}">下载图片</a>
</c:forEach>
</body>
</html>
4. DownloadServlet
下载文件的代码
package com.servlet;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;
@WebServlet(name = "LoadServlet", value = "/LoadServlet")
public class LoadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getParameter("fileName");
SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(), request, response);
path = "D:/upload/" + path;
su.setContentDisposition(null);
try {
// 根据文件路径下载文件
su.downloadFile(path);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
总结
这个明天再完善一下。