SpringMVC + servlet3.0 文件上传的配置和实现代码

简单几步,实现SpringMVC+servlet3.0文件上传功能:

第一步:配置web.xml文件中的servlet,添加multipart-config:

<!-- SpringMVC -->
<servlet>
 <servlet-name>myWeb</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:springmvc/servlet.xml</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
 <multipart-config>
  <!-- <location>/</location> -->
  <max-file-size>5242880</max-file-size> <!--单个文件最大大小:5MB-->
  <max-request-size>20971520</max-request-size> <!--所有文件最大大小:20MB-->
  <file-size-threshold>0</file-size-threshold> <!-- 超过这个大小直接存硬盘,而不是内存 -->
 </multipart-config>
</servlet> 

<servlet-mapping>
 <servlet-name>myWeb</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping> 

第二步:在servlet.xml中配置MultipartResolver:

代码如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

第三步:创建接收form表单的Controller:

package com.xjj.web.controller; 

import java.io.File;
import java.io.IOException;
import java.util.Map; 

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part; 

import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; 

import com.xjj.json.JsonResult; 

/**
 * 文件上传
 * @author XuJijun
 *
 */
@Controller
@RequestMapping("/servlet/file")
public class FileUploadController { 

 /**
  * 保存文件的目录,放在web目录、或一个指定的绝对目录下
  */
  private static final String SAVE_DIR = "uploadFiles"; 

 @RequestMapping("/upload")
 public @ResponseBody JsonResult upload(HttpServletRequest request, HttpServletResponse response, @RequestParam Map<String, Object> p)
   throws ServletException, IOException { 

  // 获取 web application的绝对路径
  String appPath = request.getServletContext().getRealPath(""); 

  // 构造文件存放的路径
  String savePath = appPath + File.separator + SAVE_DIR; 

  // 如果文件存放路径不存在,则mkdir一个
  File fileSaveDir = new File(savePath);
  if (!fileSaveDir.exists()) {
   fileSaveDir.mkdir();
  } 

  for (Part part : request.getParts()) {
   String fileName = extractFileName(part);
   if(!StringUtils.isEmpty(fileName)){
    part.write(savePath + File.separator + fileName);
   }
  } 

  return new JsonResult("200", "文件上传成功!", savePath);
 } 

 /**
  * 从content-disposition头中获取源文件名
  *
  * content-disposition头的格式如下:
  * form-data; name="dataFile"; filename="PHOTO.JPG"
  *
  * @param part
  * @return
  */
 private String extractFileName(Part part) {
  String contentDisp = part.getHeader("content-disposition");
  String[] items = contentDisp.split(";");
  for (String s : items) {
   if (s.trim().startsWith("filename")) {
    return s.substring(s.indexOf("=") + 2, s.length()-1);
   }
  }
  return "";
 } 

}

其中,request.getParts()用来获取multipart,其中就包括文件。其他<input type="text">参数由@RequestParam Map<String, Object> p接收。

第四步:form表单提交文件以及其他数据:

<html>
<head>
<meta charset="UTF-8">
 <link href="../resources/css/common.css" rel="external nofollow" rel="stylesheet" />
 <script src="../resources/js/jquery-2.1.4.js"></script> 

</head> 

<body>
<h2>File Upload</h2>
 <form method="post" enctype="multipart/form-data">
  <input type="text" name="aaa"/><br/>
  选择要上传的文件:<input type="file" name="file" size="60" /><br/>
  <input type="file" name="file" size="60" /><br/>
  <br/> <!-- <input type="submit" value="开始上传" /> -->
 </form> 

 <input type="button" value="上传吧" onclick="upload()"/>
</body> 

<script>
 function upload(){
  $("form").attr('action', "http://localhost:8080/MyJavaStudio/servlet/file/upload");
  $("form").submit();
 }
</script> 

</html> 

注:通过jQuery来submit表单,以自由拼装action url,自由定义提交按钮。

github:https://github.com/xujijun/MyJavaStudio

完整代码下载:MyJavaStudio_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • servlet3文件上传操作

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 <%@ page language="java" pageEncoding="UTF-8"%

  • Servlet3.0实现文件上传的方法

    Servlet 实现文件上传 所谓文件上传就是将本地的文件发送到服务器中保存.例如我们向百度网盘中上传本地的资源或者我们将写好的博客上传到服务器等等就是典型的文件上传. Servlet 3.0 上次完成文件下载功能使用的是 Servlet 2.5,但是想要完成文件上传,那么继续使用 Servlet 2.5 肯定不是一个好的选择,因此我们使用 Servlet 3.0 来完成文件上传.下面我来简单介绍一下 Servlet 3.0 的新特性: 1.新增的注解支持 该版本新增了若干注解,用于简化 Ser

  • Servlet3.0学习总结之基于Servlet3.0的文件上传实例

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 <%@ page language="java" pageEncoding="UTF-8"%

  • SpringMVC + servlet3.0 文件上传的配置和实现代码

    简单几步,实现SpringMVC+servlet3.0文件上传功能: 第一步:配置web.xml文件中的servlet,添加multipart-config: <!-- SpringMVC --> <servlet> <servlet-name>myWeb</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-clas

  • MyBatis与SpringMVC相结合实现文件上传、下载功能

    环境:maven+SpringMVC + Spring + MyBatis + MySql 本文主要说明如何使用input上传文件到服务器指定目录,或保存到数据库中:如何从数据库下载文件,和显示图像文件并实现缩放. 将文件存储在数据库中,一般是存文件的byte数组,对应的数据库数据类型为blob. 首先要创建数据库,此处使用MySql数据库. 注意:文中给出的代码多为节选重要片段,并不齐全. 1. 前期准备 使用maven创建一个springMVC+spring+mybatis+mysql的项目

  • SpringMVC文件上传及查看的示例代码

    写在前面 谈到文件上传,首先要说业务逻辑,如果上传的文件大家都可以看(比如广告或者首页的banner)等,那么我们就把图片放在静态资源区(与css,js一样的位置)中,如果文件是受保护的(像用户只能查看自己上传的照片),那么我们就把它存放在服务器中的某个专门存放图片的位置. 本例分别展示了存放在两个位置的上传文件的方法,上传之后,作为延伸,还添加了查看上传的文件以及下载已经上传的文件的功能. 准备工作 配置SpringMVC,导入commons包 在mvc-servlet.xml中配置文件上传解

  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中分享. 重点: html表格三要素: action="fileUpload/fileUpload" method="post" enctype="mul

  • SpringMVC多个文件上传及上传后立即显示图片功能

    多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 package com.meng.upload; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRe

  • Spring实现文件上传的配置详解

    添加依赖 主要用来解析request请求流,获取文件字段名.上传文件名.content-type.headers等内容组装成FileItem <!--添加fileupload依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</versio

  • Java文件上传下载、邮件收发实例代码

    文件上传下载 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data FileUpload 文件上传功能开发中比较常用,apache也提供了文件上传组件! FileUpload组件: 1. 下载源码 2. 项目中引入jar文件

  • C#实现文件上传及文件下载功能实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public ActionResult Upload() { // var pathUrl = "http://" + Request.Url.Authority; var file = Request.Files["Filedata"]; var uploadFileName = file.FileName; string filePath = "/File/" + uploadFileNa

  • 文件上传之SWFUpload插件(代码)

    下面通过一段代码给大家演示下,主要分为1.前台文件index.html和 2.后台文件upload.php.具体代码如下所示: 1.前台文件index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http:

  • c# 实现文件上传下载功能的实例代码

    NuGet 安装SqlSugar 1.Model文件下新建 DbContext 类 public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=localhost;uid=root;pwd=woshishui;database=test", DbType = DbType.MySql, InitKeyTy

随机推荐