一、项目结构展示与注意事项
二、文件上传
1、上传前端页面搭建
2.控制器开发
具体细节看代码注释:
三、文件下载
1、文件下载前端页面构建
2.控制器开发
四、文件上传下载控制器开发代码
如果上述的思路鲁清晰了,读者给大家提供现成的代码,供大家复制交流学习
@RequestMapping("file")
@Controller
public class FileController {
/*文件上传*/
@RequestMapping("upload")
/*
* MultipartFile upload:用于获取上传的文件,uoload对应form表单中的name --> <input type="file" name="upload">
*HttpServletRequest reques:用于拿到session对象,最终拿到目标文件夹路径
* */
public String upload(MultipartFile upload, HttpServletRequest request){
//拿到upload文件夹的服务器路径
String realPath = request.getSession().getServletContext().getRealPath("/upload");
//创建爱一个空的文件夹
File file = new File(realPath+"/"+upload.getOriginalFilename());
System.out.println("上传的文件为:"+upload);
System.out.println("上传的文件名为:"+upload.getOriginalFilename());
System.out.println("路径为:"+realPath);
try {
//将上传的文件夹读取到空的文件中
upload.transferTo(file);
} catch (IOException e) {
e.printStackTrace();
}
//下载成功,跳转到index页面
return "index";
}
/*文件下载*/
@RequestMapping("download")
public void download(String name,HttpServletRequest request, HttpServletResponse response) throws IOException {
String realPath = request.getSession().getServletContext().getRealPath("/upload");
String filePath = realPath+"/"+name;
//根据文件名获取文件对象
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
//设置响应头文件,文件下载的难点
/*
* "content-Disposition":设置文件的MIME类型
* "attachment:设置文件下载以附件的形式下载,否则会默认打开
* fileName="+ URLEncoder.encode(name,"utf-8"):设置下载文件的名字以及编码格式
* */
response.setHeader("content-Disposition","attachment;fileName="+ URLEncoder.encode(name,"utf-8"));
int len = 0;
//利用byte数组做缓冲
byte[] bytes = new byte[1024];
ServletOutputStream out = response.getOutputStream();
while(true){
len = fis.read(bytes);
if(len==-1) break;
out.write(bytes,0,len);
}
}
}