springmvc文件上传该如何实现?springmvc上传功能实现

TheDisguiser 2020-06-05 09:32:12 java常见问答 5148

Springmvc是java目前最常用的架构之一,你知道在springmvc架构下该如何实现文件上传功能吗?下面快跟小编来看看吧。

Springmvc上传功能实现

在SpringMVC中,它为文件的上传提供了MultipartResolver来实现,SpringMVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。

1)、 pom文件添加所需依赖

  <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.3</version>
    </dependency> <
    dependency >
        <groupId>commons-fileupload</groupId> <
        artifactId > commons - fileupload < /artifactId> <
        version > 1.3 .2 < /version> <
        /dependency>

2)、配置文件上传所需bean

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

3)、文件上传代码编写

上传文件界面:upload_form.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<!-- 上传单个对象 注意表单的method属性设为post,enctype属性设为multipart/form-data -->
<form method="POST" action="/SpringMVCDemo1/upload" enctype="multipart/form-data">
    <input type="file" name="file" /><br/><br/>
    <input type="submit" value="上传" />
</form>
<!-- 上传多个对象 注意表单的method属性设为post,enctype属性设为multipart/form-data -->
<form method="POST" action="/SpringMVCDemo1/uploadMultiFiles" enctype="multipart/form-data">
    <p>文件1:<input type="file" name="file" /></p>
    <p>文件2:<input type="file" name="file" /></p>
    <p>文件3:<input type="file" name="file" /></p>
    <!-- 同时传递其他业务字段 -->
    <p>用户名:<input type="text" name="userName" /></p>
    <p>密码:<input type="password" name="password" /></p>
    <p><input type="submit" value="上传" /></p>
</form>
</body>
</html>

上传文件必须把表单的method设置为POST,且将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。

上传结果返回界面:upload_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>上传结果为:${message}</h2>
</body>
</html>

注:需要提前准备存储文件的文件夹,如:"D:staticResourcesTestimgupload"

FileController.java页面

@Controller
@RequestMapping("/SpringMVCDemo1")
public class FileController
{
    /**
     * 跳转到上传页面
     * @GetMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
     */
    @GetMapping("/gotoUploadForm")
    public String index()
    {
        return "/upload_form.jsp";
    }
    /**
     * 上传单个文件
     * 通过MultipartFile读取文件信息,如果文件为空跳转到结果页并给出提示;
     * 如果不为空读取文件流并写入到指定目录,最后将结果展示到页面
     * @param multipartFile
     * @PostMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
     */
    @PostMapping("/upload")
    public String uploadSingleFile(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request)
    {
        if (multipartFile.isEmpty())
        {
            request.setAttribute("message", "Please select a file to upload '");
            return "/upload_result.jsp";
        }
        try
        {
            String contentType = multipartFile.getContentType();
            String originalFilename = multipartFile.getOriginalFilename();
            byte[] bytes = multipartFile.getBytes();
            System.out.println("上传文件名为-->" + originalFilename);
            System.out.println("上传文件类型为-->" + contentType);
            System.out.println("上传文件大小为-->" + bytes.length);
            //filePath为存储路径
            String filePath = "d:/staticResourcesTest";
            System.out.println("filePath-->" + filePath);
            //存储在staticResourcesTest下的imgupload文件夹下
            File parentPath = new File(filePath, "imgupload");
            System.out.println("上传目的地为-->" + parentPath.getAbsolutePath());
            try
            {
                File destFile = new File(parentPath, originalFilename); //上传目的地
                FileUtils.writeByteArrayToFile(destFile, multipartFile.getBytes());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            request.setAttribute("message", "You successfully uploaded '" + multipartFile.getOriginalFilename() + "'");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return "/upload_result.jsp";
    }
    /**
     * 上传多个文件,同时接受业务数据
     * @param origFiles
     * @param request
     * @param user
     * @return
     */
    @PostMapping("/uploadMultiFiles")
    public String uploadMultiFiles(@RequestParam("file") List < MultipartFile > origFiles, HttpServletRequest request, User user)
    {
        //User为实体类
        System.out.println("User==" + user);
        if (origFiles.isEmpty())
        {
            request.setAttribute("message", "Please select a file to upload '");
            return "/upload_result.jsp";
        }
        try
        {
            for (MultipartFile origFile: origFiles)
            {
                String contentType = origFile.getContentType();
                String fileName = origFile.getOriginalFilename();
                byte[] bytes = origFile.getBytes();
                System.out.println("上传文件名为-->" + fileName);
                System.out.println("上传文件类型为-->" + contentType);
                System.out.println("上传文件大小为-->" + bytes.length);
                String filePath = "d:/staticResourcesTest";
                System.out.println("上传目的地为-->" + filePath);
                try
                {
                    //上传目的地(staticResourcesTest文件夹下)
                    File destFile = new File(filePath, fileName);
                    FileUtils.writeByteArrayToFile(destFile, origFile.getBytes());
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            request.setAttribute("message", "You successfully uploaded '");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return "/upload_result.jsp";
    }
}

以上就是springmvc上传文件功能实现的所有内容了,如果你还需要了解更多相关java架构师知识,就请关注我们的网站吧。

推荐阅读:

spring框架mcv的工作原理是什么?

springmvc常用注解有哪些?常用注解介绍

springmvc是什么?什么是springmvc?