利用spring的MultipartFile实现文件上传

主要依赖jar包

spring-web-3.0.6.RELEASE.jar 用到 (org.springframework.web.multipart.MultipartFile)
commons-fileupload-1.3.1.jar
commons-logging-1.0.4.jar

前台

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>上传</title>

<style type="text/css">
</style>

</head>
<body>

    <form enctype="multipart/form-data" action="/kingtool/file/upload.do" method="POST">
        file:
        <input type="file" name="file" />
        <input type="submit" value="提交" />
    </form>

</body>
</html>

后台

package com.bobo.code.web.controller;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping({ "file/*" })
public class LoginController {

    /**
     * 承保文件上传
     *
     * @param session
     */
    @RequestMapping(value = "upload.do", method = { RequestMethod.POST, RequestMethod.GET })
    public void fileUpload(HttpSession session, ModelMap modelMap, HttpServletResponse response, HttpServletRequest request, @RequestParam("file") MultipartFile file) throws Exception, IOException {
        String ret = "";
        request.setCharacterEncoding("UTF-8");// 编码格式处理
        // 获取文件名
        String fileName = file.getOriginalFilename();
        System.out.println("fileName:------------------------------------------------------" + fileName);
        // 获取文件大小kb
        BigDecimal fileSize = new BigDecimal(file.getSize()).divide(new BigDecimal(1024), 2, BigDecimal.ROUND_HALF_UP);
        String startFileName = fileName.substring(0, fileName.indexOf("."));
        String endFileName = fileName.substring(fileName.lastIndexOf("."));
        // 新文件名称
        String newFileName = startFileName + "_" + Math.random() + endFileName;
        // 文件保存路径
        String parentPath = request.getSession().getServletContext().getRealPath("/") + "upload/";
        String filePath = parentPath + newFileName;
        System.out.println("filePath:-----------------------------------------------------------" + filePath);
        System.out.println("System.setProperty('sun.jnu.encoding') --------" + System.getProperty("sun.jnu.encoding"));
        System.setProperty("sun.jnu.encoding", "utf-8");
        System.out.println("System.setProperty('sun.jnu.encoding') --------" + System.getProperty("sun.jnu.encoding"));
        File newFile = new File(parentPath);
        if (!newFile.exists()) {// 判断文件夹是否创建,没有创建则创建新文件夹
            newFile.mkdirs();
        }
        boolean uploadFile = true;
        // 比较上传文件大小是否超过10M
        if (fileSize.compareTo(new BigDecimal(1024 * 10)) > 0) {
            uploadFile = false;
            ret = "上传文件的大小不能超过10Mb,请重新选择!";
        }
        if (uploadFile) {
            try {
                file.transferTo(new File(filePath));// 转存文件
                ret = "上传成功!";
            } catch (Exception e) {
                ret = "上传失败!";
            }
        }
        try {
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write(ret);
            response.getWriter().flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

spring bean配置

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
       <!-- maxUploadSize:文件上传的最大值以byte为单位 -->
       <property name="maxUploadSize" value="1024000"></property>
       <property name="defaultEncoding" value="GBK"></property>
    </bean>

如果不配置,可能报如下错org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present

利用spring的MultipartFile实现文件上传【原】的更多相关文章

  1. Spring MVC - MultipartFile实现文件上传(单文件与多文件上传)

    准备工作: 需要先搭建一个spirngmvc的maven项目 1.加入jar包 <dependency> <groupId>commons-fileupload</gro ...

  2. spring MVC multipart处理文件上传

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——Spring MVC其中的一个优势.Spring通过对Serv ...

  3. Spring中MultipartHttpServletRequest实现文件上传

    Spring中MultipartHttpServletRequest实现文件上传 转贴自:http://my.oschina.net/nyniuch/blog/185266 实现图片上传  用户必须能 ...

  4. 关于我使用spring mvc框架做文件上传时遇到的问题

    非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题 ...

  5. Spring MVC MultipartFile实现图片上传

    <!--Spring MVC xml 中配置 --><!-- defaultEncoding 默认编码;maxUploadSize 限制大小--><!-- 配置Multi ...

  6. Spring中MultipartHttpServletRequest实现文件上传 生成缩略图

    转贴自:http://my.oschina.net/nyniuch/blog/185266 实现图片上传  用户必须能够上传图片,因此需要文件上传的功能.比较常见的文件上传组件有Commons Fil ...

  7. spring mvc中的文件上传

    使用commons-fileupload上传文件所需要的架包有:commons-fileupload 和common-io两个架包支持,可以到Apache官网下砸. 在配置文件spring-mvc.x ...

  8. SpringMVC 使用MultipartFile实现文件上传(转)

    http://blog.csdn.net/kouwoo/article/details/40507565 一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们 ...

  9. Spring Cloud Feign的文件上传实现

    在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本来就来具体说说如何实现. 原文:http://blog.didispace.com/sprin ...

随机推荐

  1. github常用操作

    1.创建一个新的repository: $cd ~/hello-world        //到hello-world目录,本地目录名与repository的名字不一定相同 $git init    ...

  2. IO多路复用之select总结

    1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...

  3. 第二个activity

    Android四大组件 Activity BroadCastReceiver Service ContentProvider 创建第二个Activity 创建第2个Activity的过程 1. 创建c ...

  4. angular.js ng-class-even ng-class-odd ng-cloak(没啥技术含量)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. HTML标签之间不是可以随便嵌套的

    深究:我们先来认识in-line内联元素和block-line块元素,因为HTML里几乎所有元素都属于内联元素或者块元素中的一种. in-line这个词有很多种解释:内嵌.内联.行内.线级等,但是,它 ...

  6. HDU 2586 LCA

    题目大意: 多点形成一棵树,树上边有权值,给出一堆询问,求出每个询问中两个点的距离 这里求两个点的距离可以直接理解为求出两个点到根节点的权值之和,再减去2倍的最近公共祖先到根节点的距离 这是自己第一道 ...

  7. Spring核心框架 - AOP的起源及介绍

    一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...

  8. IOS UIlabel设置文本距离边框距离

    自定义UILabel 继承 UILabel 重写drawTextInRect 方法具体如下: CGRect rect = CGRectMake(rect.origin.x + 5, rect.orig ...

  9. BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛( dp )

    树形dp..水 ------------------------------------------------------------------------ #include<cstdio& ...

  10. 数据分析---《Python for Data Analysis》学习笔记【01】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...