我们只需要在控制器这样写就可以了:
有什么不懂的可以看一下代码中的注释:
@RequestMapping("fileDownLoad")
public void fileDownLoad(String filename, String fileType, HttpServletRequest request, HttpServletResponse response) throws IOException {
// 得到当前下载图片的路径
String realPath = request.getServletContext().getRealPath("/img");
// 得到当前下载的文件名
File file=new File(realPath+"/"+filename);
// 从服务器读取相应的图片资源
InputStream inputStream=new FileInputStream(file);
// ------------------------------------------
// 设置响应的格式:(下载文件的三大步骤)
// 设置下载文件的长度
response.setContentLength((int) file.length());
// 文件格式
response.setContentType(fileType);
response.setHeader("Content-Disposition","attachment;filename="+filename);
// ----------------------------------------------------
// 将文件下载到本地
OutputStream outputStream=response.getOutputStream();
IOUtils.copy(inputStream,outputStream);
outputStream.close();
inputStream.close();
}
控制器的全部方法:
package com.bjsxt.controller;
import com.bjsxt.pojo.Student;
import com.bjsxt.service.StudentService;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.UUID;
@Controller
public class MyController {
@Autowired
StudentService studentService;
@RequestMapping("/demo")
public String demo(Student student,MultipartFile fil, HttpServletRequest req) throws IOException {
// 设定文件的存储路径,如果文件不存在就创建文件
File file=new File(req.getServletContext().getRealPath("/img"));
if(!file.exists()){
file.mkdir();
}
// getName是表单的name,getOriginalFilename是获得文件全名 getSize是获得文件大小 getContentType是获得文件路径
System.out.println(fil.getName()+"---"+fil.getOriginalFilename()+"--"+fil.getSize()+"-"+fil.getContentType());
// 因为重复的文件名会替换之前的文件名,所以使用UUID,可以防止文件名重复
String uuid = UUID.randomUUID().toString();
String jgp = fil.getOriginalFilename().substring(fil.getOriginalFilename().lastIndexOf("."));
// 新的文件名 uuid.jgp
String fileName=uuid+jgp;
// 文件转换,将文件存储转换到file里,名字是fileName
fil.transferTo(new File(file,fileName));
student.setId(0);
student.setFilename(fileName);
student.setFileType(fil.getContentType());
studentService.addStudent(student);
return "redirect:success.jsp";
}
@RequestMapping("selAll")
@ResponseBody
public List selAll(){
List<Student> students = studentService.selAll();
return students;
}
@RequestMapping("fileDownLoad")
public void fileDownLoad(String filename, String fileType, HttpServletRequest request, HttpServletResponse response) throws IOException {
// 得到当前下载图片的路径
String realPath = request.getServletContext().getRealPath("/img");
// 得到当前下载的文件名
File file=new File(realPath+"/"+filename);
// 从服务器读取相应的图片资源
InputStream inputStream=new FileInputStream(file);
// ------------------------------------------
// 设置响应的格式:(下载文件的三大步骤)
// 设置下载文件的长度
response.setContentLength((int) file.length());
// 文件格式
response.setContentType(fileType);
response.setHeader("Content-Disposition","attachment;filename="+filename);
// ----------------------------------------------------
// 将文件下载到本地
OutputStream outputStream=response.getOutputStream();
IOUtils.copy(inputStream,outputStream);
outputStream.close();
inputStream.close();
}
@RequestMapping("filter")
public String filter(String name){
System.out.println("name = " + name);
return "add.jsp";
}
}