基于SSM框架的文件上传和下载
程序员文章站
2022-04-30 21:21:31
...
我们都知道在软件开发中,文件的上传和下载是最常见的功能,通过javaIO流也可以完成这个这个功能,但是今天我们来看看基于SSM框架的文件上传和下载功能的实现。
首先搭建好SSM框架,可以参考我的另外一篇博客搭建SSM框架。
1、在pro.xml中新增依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
2、在spring配置文件中配置代码如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="5242440"></property>
</bean>
3、编写发送请求的前端jsp:
<form action="${pageContext.request.contextPath}/uploadFile" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="file"/>
<input type="submit" value="上传">
</form>
<form action="${pageContext.request.contextPath}/downFile" method="get">
<input type="submit" value="下载">
</form>
4、控制层代码:
/**文件上传功能*/
@RequestMapping(value="uploadFile",headers = "content-type=multipart/*",method = RequestMethod.POST)
public String uploadFile(MultipartFile file,HttpServletRequest request)throws IOException{
//文件上传的位置,如果不存在uploadFile文件夹就创建一个
String path = request.getSession().getServletContext().getRealPath("uploadFile");
System.out.println(request.getSession().getServletContext());
String fileName=file.getOriginalFilename();
File dir=new File(path,fileName);
if(!dir.exists()){
dir.mkdirs();
}
//MultipartFile自带的解析方法
file.transferTo(dir);
return "getAllResume";
}
//**文件下载功能*//*
@RequestMapping("downFile")
public void downFile(HttpServletRequest request, HttpServletResponse response)throws Exception{
String fileName = request.getSession().getServletContext().getRealPath("uploadFile")+"/yxc.docx";
InputStream bis = new BufferedInputStream(new FileInputStream(new File(fileName)));
String filename = "yxc.docx";
filename = URLEncoder.encode(filename,"UTF-8");
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
response.setContentType("multipart/form-data");
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
int len = 0;
while((len = bis.read()) != -1){
out.write(len);
out.flush();
}
out.close();
}
文件上传的位置一般是默认在工程里面的target里面会有,如果不知道可以打印request.getSession().getServletContext().getRealPath()得到绝对路径,然后去找。这只是完成了文件的上传和下载,还有一些细节还是需要修改的,比如文件的名字肯定不能直接给,而是通过变量来获取,这样如果和数据库关联了,就可以通过数据库查询到文件路径和文件名,然后下载或者上传。另外注意这样一句话,headers = “content-type=multipart/*”,如果你没写可以访问那就好,我在学习中没有写上这句话就会报错415不支持媒体类型,这是请求头有问题。
下一篇: spring事务完成之后异步执行其他操作