记录一些学习心得,servlet实现一个简易的文件上传与下载,话不多说,直接上代码;
首先是前端页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="POST" action="upload" enctype="multipart/form-data">
用 户:<input type="text" name="userName"/><br/>
照 片:<input type="file" name="myImg"/><br/>
密 码:<input type="text" name="passWord"/>
<input type="submit" value="提交"/><br/>
</form>
<form method="GET" action="down" enctype="multipart/form-data">
<a href="down">下载</a>
</form>
</body>
</html>
界面效果图如下:
第二是上传文件部分:
package com.Loading;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.IOUtils;
@WebServlet(urlPatterns ="/upload")
public class UploadServler extends HttpServlet {
//在本地盘创建新文件夹
static final String savePath = "E:\\onload\\";
@Override
protected void doPost( HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//在控制台输出用户名和密码(可以不输出)
/*String userName = req.getParameter("userName");
resp.getWriter().println(userName);
String password = req.getParameter("passWord");
resp.getWriter().println(password);*/
//处理Multipart编码格式的数据
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if(isMultipart) {
//为基于磁盘的文件项创建工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建一个新的文件上传处理程序
ServletFileUpload uploader = new ServletFileUpload(factory);
//解决了中文乱码
uploader.setHeaderEncoding("UTF-8");
//解析请求
try {
List<FileItem> items = uploader.parseRequest(req);
for (FileItem fileItem : items) {
if(fileItem.isFormField()) {
String name = fileItem.getFieldName();//文本框名称
String value = fileItem.getString();//文本框的值
System.out.println(name+"-----"+value);
}else {
//文件
String fieldName = fileItem.getFieldName();
//文件名
String fileName = fileItem.getName();
System.out.println("文件:"+fieldName +"----"+fileName);
InputStream inputStream = fileItem.getInputStream();
String fileDest = savePath + fileName;
FileOutputStream outputStream = new FileOutputStream(fileDest);
IOUtils.copy(inputStream ,outputStream);
inputStream.close();
outputStream.close();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
最后一部分就是下载文件:
package com.Loading;
import java.io.FileInputStream;
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 org.apache.commons.io.IOUtils;
@WebServlet(urlPatterns="/down")
public class Download extends HttpServlet{
//保存下载文件的文件夹路径
static final String savePath="E:\\onload\\";
/**
* 在资源文件夹里面下载文件
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//要下载的文件(这里写死了,没加选择资源的功能)
String fileName="7712.jpg";
resp.setContentType("text/plain");
resp.setHeader("Location", fileName);
resp.setHeader("Content-Disposition", "attachment;filename="+fileName);
//文件输出流保存到到文件夹
FileInputStream fis=new FileInputStream(savePath+fileName);
IOUtils.copy(fis, resp.getOutputStream());
}
}
光阴似箭,日月如梭,小白一枚,不喜勿喷,望与君共勉!