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

    转自:http://www.cnblogs.com/fangqi/archive/2012/10/28/2743100.html

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

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

    第一步:配置MultipartResolver

    使用CommonsMultipartResolver配置一个MultipartResolver解析器:

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
            p:defaultEncoding="UTF-8"
            p:maxUploadSize="5242880"
            p:uploadTempDir="upload/temp"
            />

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

    第二步:编写文件上传表单页面和控制器

    JSP页面如下:

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
      </head>
      <body>
        <h1>选择上传文件</h1>
        <form action="<%=basePath%>user/upload.do" method="post" enctype="multipart/form-data">
            文件名:<input type="text" name="name" /><br/>
            <input type="file" name="file" /><br/>
            <input type="submit" />
        </form>
      </body>
    </html>
    复制代码

    注意:负责上传的表单和一般表单有一些区别,表单的编码类型必须是"Multipart/form-data"

    控制器UserController如下:

    复制代码
    package com.web;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    @Controller
    @RequestMapping(value = "/user")
    public class UserController {
        @RequestMapping(value = "/upload.do")
        public String updateThumb(@RequestParam("name") String name,
                @RequestParam("file") MultipartFile file)
                throws IllegalStateException, IOException {
            if (!file.isEmpty()) {
                file.transferTo(new File("d:/temp/"
                        + name
                        + file.getOriginalFilename().substring(
                                file.getOriginalFilename().lastIndexOf("."))));
                return "redirect:success.html";
            } else {
                return "redirect:fail.html";
            }
        }
    }
    复制代码

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

    1. byte[] getBytes() :获取文件数据 
    2. String getContentType():获取文件MIME类型,如image/pjpeg、text/plain等
    3. InputStream getInputStream():获取文件流
    4. String getName():获取表单中文件组件的名字
    5. String getOriginalFilename():获取上传文件的原名
    6. long getSize():获取文件的字节大小,单位为byte
    7. boolean isEmpty():是否有上传的文件
    8. void transferTo(File dest):可以使用该文件将上传文件保存到一个目标文件中
  • 相关阅读:
    懒加载与预加载
    Javascript之 Ajax 与 JSON
    Q&A:为什么prototype中的方法不能赋值给变量,再调用?
    Javascript之 浅克隆 与 深克隆
    Javascript之 __proto__ 与 prototype
    React入门(二)—— Props属性
    React入门(一)—— State属性
    Flask调用layer-iframe后,如何从服务器端关闭弹出窗
    Python从入门到项目实践(明日科技 吉林大学出版社)
    从实例到数理来解析感知机学习算法(PLA)
  • 原文地址:https://www.cnblogs.com/sharpest/p/7712018.html
Copyright © 2011-2022 走看看