zoukankan      html  css  js  c++  java
  • Spring MVC 文件上传

    Spring MVC 为文件上传提供了直接支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 使用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResolver。

    在 Spring MVC 上下文中默认没有装配 MultipartResolver,因此默认情况下不能处理文件的上传工作。如果想使用 Spring 的文件上传功能,则需要先在上下文中配置 MultipartResolver。

    1.配置 MultipartResolver

    下面使用 CommonsMultipartResolver 配置一个 MultipartResolver 解析器。

    <!-- 文件上传 -->
    <bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
      p:defaultEncoding="UTF-8"//①请求的编码格式,默认为ISO-8859-1
      p:maxUploadSize="5000000"//②上传文件的大小上限,单位为字节(5MB)
      p:uploadTempDir="file://d:/temp"/>//③上传文件的临时路径

    defaultEncoding 必须和用户 JSP 的 pageEncoding 属性一致,以便正确读取表单的内容。uploadTempDir 是文件上传过程中所使用的临时目录,文件上传完成后,临时目录中的临时文件会被自动清除。

    为了让 CommonsMultipartResolver 正常工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。

    2.编写控制器和文件上传表单页面

    在 UserController 中添加一个用于处理用户头像上传的方法,如下面代码所示。

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping(value = "/uploadPage")//
        public String updatePage() {    
            return "uploadPage";
        }
        
        @RequestMapping(value = "/upload")
        public String updateThumb(@RequestParam("name") String name,
                                  @RequestParam("file") MultipartFile file) throws Exception{
                                  //②上传的文件自动绑定到MultipartFile中
            if (!file.isEmpty()) {
                file.transferTo(new File("d:/temp/"+file.getOriginalFilename()));
                return "redirect:success.html";
            }else{
                return "redirect:fail.html";
            }
        }
    }

    Spring MVC 会将上传文件绑定到 MultipartFile 对象中。MultipartFile 提供了获取上传文件内容、文件名等方法,通过其 transferTo() 方法还可将文件存储到硬件中,具体说明如下。

    • byte[] getBytes():获取文件数据。
    • String getContentType():获取文件 MIME 类型,如 image/pjpeg、text/plain 等。
    • InputStream getInputStream():获取文件流。
    • String getName():获取表单中文件组件的名字。
    • String getOriginalFilename():获取上传文件的原名。
    • long getSize():获取文件的字节大小,单位为 Byte.
    • boolean isEmpty():是否有上传的文件。
    • void transferTo(File dest):可以使用该文件将上传文件保存到一个目标文件中。

    负责上传文件的表单和一般表单有一些区别,表单的编码类型必须是 multipart/form-data 类型。

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
        <head>
            <title>请上传用户头像</title>
        </head>
        <body>
            <h1>
                请选择上传的头像文件
            </h1>
            <form method="post" action="<c:url value="/user/upload.html"/>" enctype="multipart/form-data">//指定表单内容类型,以便支持文件上传
                <input type="text" name="name" />
                <input type="file" name="file" />//②上传文件的组件名
                <input type="submit" />
            </form>
        </body>
    </html>
  • 相关阅读:
    iOS:UIResponser控件的介绍(响应者)
    iOS:触摸控件UITouch、事件类UIEvent
    iOS:触摸事件和手势识别的介绍
    iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem
    iOS:对GCD中 同步、异步、并行、串行的见解
    iOS:转载:同步、异步、并行、串行的详解
    iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply
    pes and ts stream, how to convert
    5分钟搞定内存字节对齐
    sed 使用
  • 原文地址:https://www.cnblogs.com/jwen1994/p/11182923.html
Copyright © 2011-2022 走看看