本篇博客主要讲述在Java Web环境下实现用户上传文件和用户在网页上下载文件的功能
1、准备工作:
在项目中导入两个jar包:① commons-fileupload.jar ② commons-io.jar
下载地址:FileUpload – Home
下载地址:Commons IO – Commons IO Overview
文件上传代码实现:
/*
文件上传
*/
@WebServlet("/upload")
public class UploadFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//防止上传的文件保存时乱码
request.setCharacterEncoding("utf-8");
if(ServletFileUpload.isMultipartContent(request)){
//创建FileItemFactory实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传的数据的工具类ServletFileUpload
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//设置上传单个文件大小的最大值:2M
servletFileUpload.setFileSizeMax(1024*1024*2);
//获取每一个表单项数据
try {
//获取表单项
List<FileItem> list = servletFileUpload.parseRequest(request);
for(FileItem fileItem:list){
if(fileItem.isFormField()){
//普通表单项
//获取普通表单的Name属性值
String fieldName = fileItem.getFieldName();
//获取普通表单的内容
System.out.println(fileItem.getString());
}else{
//文件表单项
//在指定路径写入文件,getName()方法用于获取文件名
String path = request.getServletContext().getRealPath("/images");
File file = new File(path,fileItem.getName());
fileItem.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
this.doPost(request,response);
}
}
下载文件功能:
/*
文件下载
*/
@WebServlet("/download")
public class DownLoadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String user_agent = req.getHeader("user-agent");
//定义需要下载的文件名称
String fileName = "星空.jpg";
//获取application域
ServletContext servletContext = req.getServletContext();
//获取输入流
InputStream resourceAsStream = servletContext.getResourceAsStream("/images/"+fileName);
//判断需要下载文件的MIME类型
String mimeType = servletContext.getMimeType(fileName);
//设置网页响应的MIME类型
resp.setContentType(mimeType);
//获取客户端(浏览器)的信息,包括浏览器名称、版本、协议等等
String userAgent = req.getHeader("User-Agent");
if (userAgent.contains("FireFox")){
//客户端为火狐浏览器则用Base64编码格式
BASE64Encoder base64Encoder = new BASE64Encoder();
//设置网页处理数据的打开方式,以附件形式
resp.setHeader("Content-Disposition","attachment;filename==?UTF-8?B?"+ base64Encoder.encode(fileName.getBytes("utf-8"))+"?=");
}else{
//不是火狐浏览器用URL编码格式
try {
//设置网页处理数据的打开方式,以附件形式
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
//将输入流数据复制到输出流
IOUtils.copy(resourceAsStream,resp.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
这篇博客详细介绍了如何在JavaWeb环境下实现文件上传和下载功能。首先,需要引入commons-fileupload和commons-io库。文件上传部分通过ServletFileUpload解析请求,处理上传的文件并保存到指定目录。下载文件时,根据用户代理判断编码方式,设置响应内容类型和附件头,然后读取并输出文件内容。

被折叠的 条评论
为什么被折叠?



