0
点赞
收藏
分享

微信扫一扫

SpringMVC中处理multipart形式的数据(文件上传)

phpworkerman 2022-01-06 阅读 81

一. 文件上传所需要的JAR包

原⽣ servlet 处理上传的⽂件数据的, springmvc ⼜是对 serlvet 的封装,

所需jar

<!--⽂件上传所需jar坐标-->
<dependency>
 <groupId>commons-fileupload</groupId>
 <artifactId>commons-fileupload</artifactId>
 <version>1.3.1</version>
</dependency>

二. 配置⽂件上传解析器

<!--配置⽂件上传解析器,id是固定的multipartResolver-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <!--设置上传⼤⼩,单位字节-->
 <property name="maxUploadSize" value="1000000000"/>
</bean>

三.前端Form

<%--
 1 method="post"
 2 enctype="multipart/form-data"
 3 type="file"
--%> <form method="post" enctype="multipart/form-data" action="/demo/upload">
 <input type="file" name="uploadFile"/>
 <input type="submit" value="上传"/>
</form>

四. 后台接收Handler

 /**
     * 文件上传
     * @return
     */
    @RequestMapping(value = "/upload")
    public ModelAndView upload(MultipartFile uploadFile,HttpSession session) throws IOException {

        // 处理上传文件
        // 重命名,原名123.jpg ,获取后缀
        String originalFilename = uploadFile.getOriginalFilename();// 原始名称
        // 扩展名  jpg
        String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length());
        String newName = UUID.randomUUID().toString() + "." + ext;

        // 存储,要存储到指定的文件夹,/uploads/yyyy-MM-dd,考虑文件过多的情况按照日期,生成一个子文件夹
        //获取“/uploads”真实的磁盘路径存到realPath字符串变量中
        String realPath = session.getServletContext().getRealPath("/uploads");
        //获取当前的系统时间并以"yyyy-MM-dd"格式生成,并存储在datePath字符串变量中
        String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        File folder = new File(realPath + "/" + datePath);

        if(!folder.exists()) {
            folder.mkdirs();
        }


        // 存储文件到目录
        uploadFile.transferTo(new File(folder,newName));


        // TODO 文件磁盘路径要更新到数据库字段

        Date date = new Date();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("date",date);
        modelAndView.setViewName("success");
        return modelAndView;
    }

举报

相关推荐

0 条评论