springmvc中文件上传下载

SpringMVC实现文件的上传和下载
相对于JavaWeb阶段我们使用过servlet实现文件上传和下载操作;而SpringMVC实现了对上传操作的直接支持,提供了multipart解析器。MultipartFile提供了一些对文件操作的方法,使得文件上传变得更简单。无论上传还是下载都是进行二进制流的转换,下面我们以案例的形式了解一下如何使用SpringMVC实现文件的上传操作。

文件上传

准备

了解

  1. 文件上传我们首先要考虑的就是把文件上传到哪里?是上传到工程目录下,还是上传到本地磁盘中?
  2. 因为上传的文件一般都是二进制文件,所以我们需要通过某种方式对表单提交进行编码。通过将enctype设置为multipart/form-data,每个输入域都将作为POST请求的不同部分进行提交(默认提交的表单中数据存储格式是名字-值,显然是不适合类似文件上传那种二进制数据的)。
  3. Spring提供了对multipart数据的解析器CommonsMultipartResolverMultipartResolver接口的实现类),但是这个解析器是基于Apache Commons FileUpload技术的,所以需要commons-filrUpload.jar支持。

配置

除了我们之前使用的Spring以及SpringMVC的先关jar依赖包,还需要导入以下jar文件:

<!--文件上传下载-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
在springmvc.xml中配置上传下载解析器
<!--上传下载解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760"></property> <!--设置最大支持的上传文件大小 B-->
</bean>
前台代码示例:

 后台代码示例

 @RequestMapping("/insertMovie")
    @ResponseBody
    public Map<String,String> insertMovie(@RequestParam(value="file",required = false) MultipartFile file,
                                          Movie movie,
                                          HttpServletRequest request
                                          ){
        Map<String,String> ret = new HashMap<String,String>();
        Movie movie1 = movieServices.selectMovieByName(movie.getMovieCname());
        if (movie1!=null){
         ret.put("type","error");
         ret.put("msg","电影已经存在,请勿二次添加");
         return ret;
        }
        if (movie.getMovieDetail().length()>255){
            ret.put("type","error");
            ret.put("msg","电影详情文字过长,请简要说明");
            return ret;
        }

      if(file.getSize()>10485760){
          ret.put("type","error");
          ret.put("msg","文件大小不得大于10M");
           return ret;
      }
      String oldName = file.getOriginalFilename();
      String type = oldName.substring(oldName.lastIndexOf(".")+1,oldName.length());
      if (!"jpg,jpeg,gif,png".toUpperCase().contains(type.toUpperCase())){
          ret.put("type","error");
          ret.put("msg","请添加包含jpg,jpeg,gif,pang为后缀的图片");
          return ret;
      }
      //上传图片要存储的路径,电影海报路径为movies/电影名字/picture/图片
        String path = request.getSession().getServletContext().getRealPath("static/static/movies/"+movie.getMovieCname()+"/picture/");
        File target = new File(path);
        if (!target.exists()){
            target.mkdirs();
        }

      String newName = System.currentTimeMillis()+"."+type;

        try {
            file.transferTo(new File(target,newName));
        } catch (IOException e) {
            e.printStackTrace();
            ret.put("type","error");
            ret.put("msg","文件保存异常");
            return ret;

        }
        //电影海报的项目绝对路径
        movie.setMoviePicture("static/static/movies/"+movie.getMovieCname()+"/picture/"+newName);
        //默认添加时,将电影状态设置为1,代表热映
        movie.setMovieState(1);
        int i = movieServices.insertMovie(movie);
        if (i<0){
            ret.put("type","error");
            ret.put("msg","添加失败");
            return ret;
        }

        ret.put("type","success");
        ret.put("msg","添加成功");

        return ret;

    }
View Code
 

猜你喜欢

转载自www.cnblogs.com/ghwq/p/12446660.html