首先实现文件上传,选择的文件上传后就可以把这个文件下载下来
1.创建一个HTML页面
<body>
<form action="/springmvc/file/upload.do" method="POST" enctype="multipart/form-data">
选择文件
<input type="file" name="file"/>
<input type="submit" value="上传" />
</form>
</body>
2.写上传跳转后端代码
@RequestMapping(value="upload")
// @RequestParam MultipartFile file 说明是获取前端传递过来的文件
public String upload(@RequestParam MultipartFile file,HttpServletRequest request) {
System.out.println("upload 进来的:" + file);
// 拿到文件 ===> 保存到服务器目录
String fileName = file.getOriginalFilename();
System.out.println("fileName: " + fileName);
// 1. 服务器的根目录
// 当前线程 类加载的位置 找根路径的资源 转换为地址
//String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath();
//网站根目录
String path=request.getServletContext().getRealPath("/");
System.out.println("path:"+path);
//String webpath=this.getClass().getClassLoader().getResource("/").getPath();
// 2. 创建新文件
// 新文件路径 . File.separator 获取系统的分隔符
// / linux
// \ windows
//String newFilePath = path + File.separator + fileName;
String newFilePath=path+File.separator;
newFilePath+=("upload"+File.separator);
newFilePath+=fileName;
//自己的文件夹路径
// 创建的新的文件
File newFile = new File(newFilePath);
//判断文件夹路径是否存在
File parent=newFile.getParentFile();
if(!parent.exists()){//如果父文件夹不存在
parent.mkdirs();//那么久创建文件夹
}
// 将文件转换到新文件中
try {
file.transferTo(newFile);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(path);
//System.out.println(webpath);
HttpSession session=request.getSession();
session.setAttribute("img", fileName);
return "upload-success.html";
}
3.创建上传成功的HTML页面
<body>
上传成功!
<a href="/springmvc/file/download.do">下载</a>
</body>
</html>
<script src="/springmvc/js/jquery.min.js"></script>
<script>
$.ajax({
url:"/springmvc/file/getImgName.do",
dataType:"json",
success: function(data){
var filePath="/springmvc/upload/"+data.img;
//利用jquery生成一张图片
var oImg=$('<img src="'+filePath+'"/>')
//添加到body元素
$("body").append(oImg);
}
})
</script>
4.写点击下载跳转后端
@RequestMapping(value="download")
public String download(HttpSession session,HttpServletRequest request,HttpServletResponse response){
//1.找到文件
String fileName=(String)session.getAttribute("img");
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
//告诉浏览器,当前传输的内容是一个附件文件
response.setHeader("Content-Disposition","attachment;fileName="
+fileName);
//获取到上传文件的路径
String path=request.getServletContext().getRealPath("upload");
String filePath=path+File.separator+fileName;
try {
FileInputStream is=new FileInputStream(filePath);
//获取输出的对象
ServletOutputStream os=response.getOutputStream();
//创建数组值
byte[] b=new byte[1024];
int len=0;
while((len=is.read(b))>0){
os.write(b);
}
//关闭http输出流
os.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "/file/upload-success.html";
}
5.写ajax要进入的后端代码
@ResponseBody //返回结果是一个json数据
@RequestMapping("getImgName")
public Map<String,Object> getImgName(HttpSession session){
String img=(String)session.getAttribute("img");
Map<String,Object> map=new HashMap<String,Object>();
map.put("img", img);
return map;
}
其中后端代码都是写在一个类中,类上面要加俩个注解@Controller和@RequestMapping(value="/file/")。还有spring配置文件,文件名是springmvc.xml.