文件上传
导入jar包
页面代码
<form action="/add" method="post" enctype="multipart/form-data">
<input type="text" placeholder="输入编号" name="id">
<p>照片:<input type="file" name="stuPicture"></p>
<input type="submit" value="提交">
</form>
后端代码
package controller;
import org.apache.commons.fileupload.util.Streams;
import org.apache.tomcat.util.http.fileupload.FileItemIterator;
import org.apache.tomcat.util.http.fileupload.FileItemStream;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import utils.JDBCUtils;
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.util.UUID;
@WebServlet("/add")
public class AddPicture extends HttpServlet {
//上传目录
public static final String UPLOAD_DIR = "C:\\Users\\23017\\Desktop\\picture\\";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
//创建上传对象
ServletFileUpload upload = new ServletFileUpload();
//设置文件大小
upload.setFileSizeMax(10 * 1024 * 1024);//10mb
//判断请求中是否有上传内容
if(ServletFileUpload.isMultipartContent(req)){
//获得文件迭代器
try {
FileItemIterator itemIterator = upload.getItemIterator(req);
String id= null,picture = null;
//遍历文件项目
while(itemIterator.hasNext()){
FileItemStream item = itemIterator.next();
//判断表单项,是否是文件域
if(item.isFormField()){
//获得文本框类型的表单项的名字,读取值
String value = Streams.asString(item.openStream(),"UTF-8");
switch(item.getFieldName()){
case "picture": picture = value;
System.out.println("pppp=="+picture);
break;
case "id": id = value;break;
}
}else{
//处理文件域,读取文件的字节,写入到服务器的文件中
//处理文件的覆盖问题,文件名不重复(文件名设置为系统毫秒数 System.currentMills, UUID)
File file = new File(UPLOAD_DIR);
//如果上传目录不存在就创建
if(!file.exists()){
file.mkdir();
}
//截取后缀名
String fileName = item.getName();
String suffix = fileName.substring(fileName.lastIndexOf("."));
// stuPicture = System.currentTimeMillis() + suffix;
picture = UUID.randomUUID().toString().replace("-","") + suffix;
//读取上传文件,写入服务器文件
Streams.copy(item.openStream(),new FileOutputStream(UPLOAD_DIR + picture),true);
}
}
//添加到数据库
int rows = JDBCUtils.update("insert into picture(id,picture) values(?,?)",
id,picture);
if(rows > 0){
//跳转到查询学生的servlet
resp.sendRedirect("/index.jsp");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
文件下载
代码
package controller;
import org.apache.commons.fileupload.util.Streams;
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.*;
import java.net.URLEncoder;
@WebServlet("/down.do")
public class DownloadServlet extends HttpServlet {
public static final String DOWNLOAD_DIR = "C:\\Users\\23017\\Desktop\\picture\\";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得文件名
String filename = req.getParameter("filename");
System.out.println("filename="+filename);
File file = new File(DOWNLOAD_DIR + filename);
System.out.println("filename="+file.exists());
if(file.exists()){
//获得文件输入流(读到内存)
InputStream inputStream = new FileInputStream(DOWNLOAD_DIR + filename);
//获得输出流(给客户)
OutputStream outputStream = resp.getOutputStream();
//设置响应头 encode 编码
resp.addHeader("content-disposition","attachment;filename="+
URLEncoder.encode(filename,"UTF-8"));
//读取文件,发给客户端
Streams.copy(inputStream,outputStream,true);
}else {
resp.getWriter().println("文件不存在");
}
}
}
运行效果