今天来介绍一个关于SpringMVC框架的文件上传功能。首先我个人感觉SpringMVC框架的文件上传还是要比Struts2框架要好用一些,灵活性更强。因为SpringMVC框架的文件上传有几种不同的实现方式,所以我们先给大家介绍基于CommonsMultipartFile来实现文件上传的功能

1. 大家可以先了解案例实现的效果

 

2. 搭建一下文件上传必备的环境

  • 导入commons-fileupload-13.2.jar,commons-io-2.5.jar
  • 在SpringMVC的配置文件中增加支持文件上传的解析器如果不加入文件上传的解析,那么我们提交的请求会出现HTTP 400的错误

3. 文件上传功能需求

  • 客户端提交的上传文件需要保存到Web服务器指定的目录中
  • 服务器保存的文件名字需要进行一定的修改

4. 功能实现步骤

  • 添加支持文件上传的解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.gxa.springmvc.controller"></context:component-scan> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5242880"></property>
<property name="maxInMemorySize" value="4096"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean> </beans>
  • 编写文件上传的控制器代码
package com.gxa.springmvc.controller;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile; /**
* SpringMVC的文件上次应用
* @author caleb
*
*/
@Controller
@RequestMapping("/upload")
public class FileUploadController { /**
* 单个文件上传
* @throws IOException
*/
@RequestMapping("/singlefileupload")
public void singleFileUpload(@RequestParam(value="file") CommonsMultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
long start = System.currentTimeMillis();
String uploadFileName = file.getOriginalFilename();
String savePath = request.getServletContext().getRealPath("/") + "upload";
savePath = savePath.replaceAll("\\\\", "/");
String saveFileName = start + "" + uploadFileName.substring(uploadFileName.lastIndexOf("."));
File dirs = new File(savePath);
if (!dirs.exists()) {
dirs.mkdirs();
}
file.transferTo(new File(dirs, saveFileName));
long end = System.currentTimeMillis();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("上传文件的名称 = " + uploadFileName);
out.println("<p>");
out.println("保存文件的路径 = " + savePath);
out.println("<p>");
out.println("保存文件的名称 = " + saveFileName);
out.println("<p>");
out.println("上传成功的时间 = " + String.valueOf(end - start) + "ms");
out.flush();
out.close();
} }
  • 编写文件上传的html代码,注意表单中需要加入enctype="multipart/form-data"
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload/singlefileupload.do" method="post" enctype="multipart/form-data">
<fieldset>
<legend>单个文件上传</legend>
<input type="file" name="file"><input type="submit">
</fieldset>
</form>
</body>
</html>

5. 控制器中代码解读

  • singleFileUpload中的@RequestParam("file") CommonsMultipartFile file
public void singleFileUpload(@RequestParam(value="file") CommonsMultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException 

注意:html代码中文件上传域中的name="file"要对应Java代码中@RequestParam("file") CommonsMultipartFile file

  • file.transferTo(new File(dirs, saveFileName)); 封装了解析文件上传的IO流,同时完成将文件保存到服务器的操作
  • 因为在SpringMVC的配置文件中没有添加ViewResolver接口,所以我们就利用比较传统的Servlet API来展示上传成功的信息输出

 源码下载地址:https://pan.baidu.com/s/1eSDZwFg

[刘阳Java]_SpringMVC文件上传第1季_第10讲的更多相关文章

  1. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  2. Java Web文件上传

    参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...

  3. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  4. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  5. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器 private boolean uploadServer ...

  6. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  7. Java超大文件上传解决办法

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  8. java+大文件上传解决方案

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...

  9. H5+JAVA的文件上传,断点续传

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

随机推荐

  1. 智能驾驶操作系统OS

    智能驾驶操作系统OS 自动驾驶操作系统是一个流程化.复杂的综合系统,设计到众多流程和领域.首先,分为不同的层,包括:感知层.认知层.决策规划层.控制层和执行层几个层面. 自动驾驶操作系统是一个流程化. ...

  2. Python 扩展 Op

    Python 扩展 Op 注意 :本文涉及的 Python Kernel 仅在 gcc 4.8.5 编译环境下充分测试,进一步的完善计划见 Issue 3951. 背景介绍 OneFlow 将各种对于 ...

  3. AI+IoT+电池应用

    AI+IoT+电池应用 AIoT电池 突破你的想象 将行业领先的电池电化学技术与前沿的能源物联网最佳实践相结合,利用智能物联技术开展电池全生命周期的管理优化和交叉领域的协同应用,解锁动力电池全生命周期 ...

  4. NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架

    NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架 Introducing NVIDIA Jarvis: A Framework for GPU-Accelerated Conversa ...

  5. MLPerf结果证实至强® 可有效助力深度学习训练

    MLPerf结果证实至强 可有效助力深度学习训练 核心与视觉计算事业部副总裁Wei Li通过博客回顾了英特尔这几年为提升深度学习性能所做的努力. 目前根据英特尔 至强 可扩展处理器的MLPerf结果显 ...

  6. VB Aspose.Pdf 字体变小方格问题处理

    宋体是这样写的:SimSun原先以为是:宋体 先定义字体,在PDF中无法设置,这个找了很久,原来是使用:FontRepository.FindFont方式,这个坑了很久,很多都说是setFont,压根 ...

  7. Samsung WLAN AP RCE漏洞及利用工具

    1.漏洞详情: 三星 WLAN AP WEA453e 路由器 远程命令执行 2.fofa语句 title=="Samsung WLAN AP" 3.复现 payload: POST ...

  8. Java面试必知必会:基础

    面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...

  9. Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide

    大家好,我是 Guide哥!端午已过,又要开始工作学习啦! 我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证.JWT 以及 Cookie 这些概念. 所以,根据我根据日 ...

  10. 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API

    目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...