美文网首页SpringMvc
【SpringMvc】从零开始学SpringMvc之文件上传(五

【SpringMvc】从零开始学SpringMvc之文件上传(五

作者: 欢子3824 | 来源:发表于2019-02-12 10:48 被阅读0次

    大家新年好,这一篇,我们来说说springmvc的文件上传。

    首先,需要在配置springmvc-servlet.xml中配置MultipartResolver

    <!-- springMVC上传文件时,需要配置MultipartResolver处理器 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8"></property>
            <property name="maxUploadSize" value="10485760000"></property>
            <property name="maxInMemorySize" value="40960"></property>
        </bean>
    

    在WEB-INF/html文件夹下创建upload.html

    这里介绍2个方法,

    1.采用multipart提供的file.transfer方法上传文件

    在upload.html中添加form表单

    <h1>采用multipart提供的file.transfer方法上传文件2</h1>
            <form name="form2" action="/SpringMvc/file/upload" method="post" enctype="multipart/form-data">
                <input type="file" name="file_03" /> <input type="submit" value="fileupload" />
            </form>
    

    创建FileController,并添加upload方法

    @Controller
    @RequestMapping("/file")
    public class FileController extends BaseController {
    
        @RequestMapping("")
        public String index() {
            return "upload";
        }
    
        /**
         * 单个文件
         * 
         * @param file
         * @param request
         * @return
         */
        @ResponseBody
        @RequestMapping("/upload")
        public BaseModel upload(@RequestParam(value = "file_03", required = false) MultipartFile file,
                HttpServletRequest request) {
            if (file == null || file.isEmpty()) {
                return makeModel(ERROR_CODE, "文件不存在");
            }
    
            String fileName = file.getOriginalFilename();
            File targetFile = new File("D:/ch", getTemFileName(fileName));
            if (!targetFile.exists()) {
                targetFile.mkdirs();
            }
            try {
                file.transferTo(targetFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return makeModel(SUCC_CODE, "上传成功");
    
        }
    }
    

    需要注意的是,upload方法中的value需与form表单中的name字段保持一致;

    通常情况下,我们需要对上传的文件进行重命名

    /**
         * 获取文件后缀
         * 
         * @param name
         * @return
         */
        public static String subType(String name) {
            if (isEmpty(name)) {
                return "";
            }
            int index = name.lastIndexOf(".");
            if (index >= 0) {
                return name.substring(index);
            }
    
            return "";
        }
    
        /**
         * 获取临时文件名
         * 
         * @param fileName
         * @return
         */
        public static String getTemFileName(String fileName) {
            return getTemple() + subType(fileName);
        }
          public static String getTemple() {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            return format.format(new Date());
        }
    
    

    我们在浏览器中输入http://localhost:8080/SpringMvc/file/,然后选择文件,点击上传,之后在我们自定义的文件夹下,即可看到我们上传的文件。

    image.png

    2.使用spring MVC提供的方法上传文件

    在upload.html中添加form表单

    <h1>使用spring MVC提供的方法上传文件</h1>
            <form name="form2" action="/SpringMvc/file/uploadspring" method="post" enctype="multipart/form-data">
                <input type="file" name="file_04" />
                <input type="submit" value="fileupload" />
            </form>
    

    在FileController中添加uploadspring方法

    
        /**
         * 多个文件
         * 
         * @param request
         * @return
         */
        @ResponseBody
        @RequestMapping("/uploadspring")
        public BaseModel uploadspring(HttpServletRequest request) {
            // CommonsMutipartResolver
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                    request.getSession().getServletContext());
            // 是否有enctype="multipart/form-data"
            if (multipartResolver.isMultipart(request)) {
                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 遍历
                Iterator<?> iter = multiRequest.getFileNames();
    
                while (iter.hasNext()) {
                    //
                    MultipartFile file = multiRequest.getFile(iter.next().toString());
                    if (file != null) {
                        //
                        File targetFile = new File("D:/ch", getTemFileName(file.getOriginalFilename()));
                        if (!targetFile.exists()) {
                            targetFile.mkdirs();
                        }
                        try {
                            file.transferTo(targetFile);
                        } catch (IllegalStateException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
    
                        return makeModel(SUCC_CODE, "上传成功");
                    }
    
                    return makeModel(ERROR_CODE, "文件不存在");
                }
                return makeModel(ERROR_CODE, "文件不存在");
            } else {
                return makeModel(ERROR_CODE, "文件不存在");
            }
    
        }
    

    跟方法一一样,我们在浏览器中输入http://localhost:8080/SpringMvc/file/,然后选择文件,点击上传,之后在我们自定义的文件夹下,即可看到我们上传的文件。

    image.png

    最后献上源码Github

    你的认可,是我坚持更新博客的动力,如果觉得有用,就请点个赞,谢谢

    相关文章

      网友评论

        本文标题:【SpringMvc】从零开始学SpringMvc之文件上传(五

        本文链接:https://www.haomeiwen.com/subject/pssheqtx.html