一、导入两个jar包
- 点击下载 commons-fileupload-1.4.jar
- 点击下载 commons-io-2.8.0.jar
二、上传文件代码操作
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
//判断上传的文件是否是多端数据,如果是多段数据,才是文件上传的
if (ServletFileUpload.isMultipartContent(req)) {
//创建工厂类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传文件的工具类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
//解析上传的数据,得到每一个表单项 FileItem
try {
//将表单中的所有提交的input项放入List集合中
List list = servletFileUpload.parseRequest(req);
//遍历List集合中的数据
for (FileItem file : list) {
if (file.isFormField()) { //判断是否是普通表单项
System.out.println("表单项的name属性值:" + file.getFieldName());
System.out.println("表单项的Value值:" + file.getString("utf-8"));
} else { //若不是普通表单项,即是上传的文件类型
System.out.println("表单项的name属性值:" + file.getFieldName());
System.out.println("上传的文件名:" + file.getName());
//将上传的文件保存在指定的路径中
file.write(new File("/media/daidai/864C2900FECE5B5C/Admin/Daidai/web/File/" + file.getName()));
System.out.println(getServletContext().getRealPath(file.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
out.print("文件上传成功!");
}
三、下载文件代码操作
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//定义下载的文件名
String downloadFileName = "02.jpg";
//读取要下载的内容
ServletContext servletcontext =getServletContext();
//获取要下载的文件类型
String mimeType = servletcontext.getMimeType("/File/"+downloadFileName);
//设置回传文件的类型
resp.setContentType(mimeType);
//动态解决中文乱码的方法
if(req.getHeader("User-Agent").contains("Firefox")){
resp.setHeader("Content-Disposition","attachment;filename==?UTF-8?B?"+new base64Encoder().encode(downloadFileName.getBytes("UTF-8"))+"?=");
}else{
resp.setHeader("Content-Disposition","attachment;filename=="+ URLEncoder.encode(downloadFileName,"utf-8"));
}
//定义文件的下载路径
InputStream resource = servletcontext.getResourceAsStream("/File/02.png");
//获取响应输出流
OutputStream outputStream = resp.getOutputStream();
//使用工具将源数据复制到数据流中,即输出数据
IOUtils.copy(resource,outputStream);
}