(九) - 文件上传

一. 导入相关 jar 包(若之前导入过 servlet-api 需排除)

        <!--文件上传jar包, 前面已导过servlet-api需排除-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

二. 创建 upload.jsp

<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/upload/test1" method="post" enctype="multipart/form-data">
        file: <input type="file" name="source"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

三. 创建 UploadController.java

@Controller
@RequestMapping("/upload")
public class UploadController {

    @RequestMapping("/test1")
    //MultipartFile的值需与前端中file标签的name值相同, 以此获取前端上传的数据
    public String test1(MultipartFile source, HttpSession session) throws IOException {
        System.out.println("test1");

        //获取上传文件的 原始名称
        String fileName = source.getOriginalFilename();
        //获取上传文件的 类型
        String contentType = source.getContentType();

        //生成一个唯一的文件名, 防止提交的文件重名
        String uniqueFileName = UUID.randomUUID().toString();
        //获取文件后缀名
        String ext = FilenameUtils.getExtension(fileName);
        //拼接成完整的唯一文件名, 用于接收文件
        String uniqueFileName2 = uniqueFileName + "." + ext;
        System.out.println(uniqueFileName2);

        System.out.println(fileName);
        System.out.println(contentType);
        //返回该项目中参数目录的绝对路径
        String realPath = session.getServletContext().getRealPath("/upload");
        System.out.println("/upload目录的绝对路径: " + realPath);

        //保存文件
        source.transferTo(new File(realPath + "\\" + uniqueFileName2));
        return "hello";
    }
}

四. 在 mvc.xml 中注册上传解析器(id固定为 multipartResolver)

    ...
    <!--上传解析器, id为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

</beans>

五. 访问操作及验证

 

 

 

 

 

 文件会保存到 target 的 upload 目录下, 为了让 upload 目录在项目部署时能正常部署过去, 不能让其为空, 比如在其中创建一个文件, 

 

 

 

 

 

 

 

 

 console 打印:

 

posted @ 2020-12-29 16:54  山下明明子  阅读(73)  评论(0编辑  收藏  举报