使用commons-fileupload&commons-io实现简单的文件上传和下载功能
上传功能(核心代码)
// 创建FileItemFactory对象
FileItemFactory factory = new DiskFileItemFactory();
// 创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
//使用ServletFileUpload解析request,返回的是数据
List<FileItem> list=upload.parseRequest(req);
//根据api方法判断上传表单项和普通表单项
for (FileItem fileItem : list) {
// 获取上传表单项
if (!fileItem.isFormField()) {
// 获取文件的名字
String realName = fileItem.getName();
user.setRealName(realName);
// 获取文件后缀名
String afterName = realName.substring(realName.lastIndexOf(".") + 1);
//过滤文件类型
if(!("jpg".equals(afterName.toLowerCase())||"png".equals(afterName.toLowerCase())||"gif".equals(afterName.toLowerCase()))){
resp.getWriter().write("文件类型不支持,暂时只支持png,jpg,gif");
return;
}
// 测试输出文件后缀名
//System.out.println(afterName);
// 获取文件的类型
String type = fileItem.getContentType();
user.setType(type);
// 获取文件保存路径
String savePath = this.getServletContext().getRealPath("/upload");
File save = new File(savePath);
// 测试输出
// System.out.println(savePath);
// 判断文件夹是否存在
if (!save.exists()) {
// 创建不存在的目录
save.mkdirs();
}
// 获取唯一的uuid,用于文件名
String uuid = UUID.randomUUID().toString();
// 生成保存在服务器上的文件名
String saveName = uuid + "." + afterName;
// 测试输出生成的文件名
// System.out.println(saveName);
// 保存生成的文件名
user.setPhotoName(saveName);
// 保存文件
File file = new File(savePath + "\\" + saveName);
// 测试输出
// System.out.println(file.getAbsolutePath());
try {
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
// System.out.println("文件写出成功!");
} else {
if ("uname".equals(fileItem.getFieldName())) {
user.setUname(fileItem.getString("utf-8"));
} else if ("pwd".equals(fileItem.getFieldName())) {
user.setPwd(fileItem.getString());
} else {
System.out.println("字段不存在");
}
}
}
下载功能实现(核心代码)
//User是是一个实体类,和数据库中一个表对应,存有图片的一些信息
//设置页面展示的文件格式
resp.setContentType(user.getType());
// 处理请求信息
// 测试输出
// System.out.println(user);
//获取文件的路径,upload位于webRoot或者WebContent
String filePath= this.getServletContext().getRealPath("/upload")+"/"+user.getPhotoName();
//获取文件的大小
File file = new File(filePath);
//
resp.setContentLength((int) file.length());
//获取文件的原名
String realName =user.getRealName();
//获取浏览器信息
String userAgent = req.getHeader("User-Agent").toLowerCase();
//判断浏览器,针对不同浏览器设置不同的解决方案
if(userAgent.indexOf("msie")>=0){
//ie的编码解决方式
realName = URLEncoder.encode(realName, "utf-8");
}else{
//其他浏览器的中文解决方式
byte [] bytes = realName.getBytes("utf-8");
realName = new String(bytes,"iso-8859-1");
}
resp.setHeader("Content-Disposition", "attachment;filename="+realName);
// 响应处理结果
InputStream is = new FileInputStream(file);
OutputStream os = resp.getOutputStream();
IOUtils.copy(is, os);
//关闭流资源
is.close();
os.close();