欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于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不支持媒体类型,这是请求头有问题。