Spring实现文件上传功能

本篇文章,我们要来做一个Spring的文件上传功能:

1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖:

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-web</artifactId>

  <version>1.0.2.RELEASE</version>

</dependency>

2.在webapp目录下的index.jsp文件中输入一个表单:

<html>

<body>

<form method="POST" enctype="multipart/form-data"

   action="/upload">

  File to upload: <input type="file" name="file"><br /> Name: <input

    type="text" name="name"><br /> <br /> <input type="submit"

                           value="Upload"> Press here to upload the file!

</form>

</body>

</html>

这个表单就是我们模拟的上传页面。

3. 编写处理这个表单的Controller:

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import org.springframework.stereotype.Controller;

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.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

@Controller

public class FileUploadController {

  @RequestMapping(value="/upload", method=RequestMethod.GET)

  public @ResponseBody String provideUploadInfo() {

    return "You can upload a file by posting to this same URL.";

  }

  @RequestMapping(value="/upload", method=RequestMethod.POST)

  public @ResponseBody String handleFileUpload(@RequestParam("name") String name,

      @RequestParam("file") MultipartFile file){

    if (!file.isEmpty()) {

      try {

        byte[] bytes = file.getBytes();

        BufferedOutputStream stream =

            new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));

        stream.write(bytes);

        stream.close();

        return "You successfully uploaded " + name + " into " + name + "-uploaded !";

      } catch (Exception e) {

        return "You failed to upload " + name + " => " + e.getMessage();

      }

    } else {

      return "You failed to upload " + name + " because the file was empty.";

    }

  }

}

4. 然后我们对上传的文件做一些限制,同时编写main方法来启动这个web :

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.context.embedded.MultiPartConfigFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import javax.servlet.MultipartConfigElement;

@Configuration

@ComponentScan

@EnableAutoConfiguration

public class Application {

  @Bean

  public MultipartConfigElement multipartConfigElement() {

    MultiPartConfigFactory factory = new MultiPartConfigFactory();

    factory.setMaxFileSize("128KB");

    factory.setMaxRequestSize("128KB");

    return factory.createMultipartConfig();

  }

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

}

5. 然后访问http://localhost:8080/upload就可以看到页面了。

上面的例子是实现的是单个文件上传的功能,假定我们现在要实现文件批量上传的功能的话,我们只需要简单的修改一下上面的代码就行,考虑到篇幅的问题,下面只是贴出和上面不同的代码,没有贴出的说明和上面一样。:

1.  新增batchUpload.jsp文件

<html>

<body>

<form method="POST" enctype="multipart/form-data"

   action="/batch/upload">

  File to upload: <input type="file" name="file"><br />

  File to upload: <input type="file" name="file"><br />

  <input type="submit" value="Upload"> Press here to upload the file!

</form>

</body>

</html>

2. 新增BatchFileUploadController.java文件:

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.util.List;

/**

 * Created by wenchao.ren on 2014/4/26.

 */

@Controller

public class BatchFileUploadController {

  @RequestMapping(value="/batch/upload", method= RequestMethod.POST)

  public @ResponseBody

  String handleFileUpload(HttpServletRequest request){

    List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");

    for (int i =0; i< files.size(); ++i) {

      MultipartFile file = files.get(i);

      String name = file.getName();

      if (!file.isEmpty()) {

        try {

          byte[] bytes = file.getBytes();

          BufferedOutputStream stream =

              new BufferedOutputStream(new FileOutputStream(new File(name + i)));

          stream.write(bytes);

          stream.close();

        } catch (Exception e) {

          return "You failed to upload " + name + " => " + e.getMessage();

        }

      } else {

        return "You failed to upload " + name + " because the file was empty.";

      }

    }

    return "upload successful";

  }

}

这样一个简单的批量上传文件的功能就ok了,是不是很简单啊。

注意:上面的代码只是为了演示而已,所以编码风格上采取了随性的方式,不建议大家模仿。

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

(0)

相关推荐

  • Spring MVC 文件上传下载的实例

    Spring MVC 文件上传下载,具体如下: (1) 导入jar包:ant.jar.commons-fileupload.jar.connom-io.jar. (2) 在src/context/dispatcher.xml中添加 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEnc

  • Spring学习笔记2之表单数据验证、文件上传实例代码

    在上篇文章给大家介绍了Spring学习笔记1之IOC详解尽量使用注解以及java代码,接下来本文重点给大家介绍Spring学习笔记2之表单数据验证.文件上传实例代码,具体内容,请参考本文吧! 一.表单数据验证 用户注册时,需要填写账号.密码.邮箱以及手机号,均为必填项,并且需要符合一定的格式.比如账号需要32位以内,邮箱必须符合邮箱格式,手机号必须为11位号码等.可以采用在注册时验证信息,或者专门写一个工具类用来验证:来看下在SpringMVC中如何通过简单的注释实现表单数据验证. 在javax

  • springMVC配置环境实现文件上传和下载

    最近的项目中用到了文件的上传和下载功能,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 下面就是springMVC配置环境实现文件上传和下载的具体步骤,供大家参考,具体内容如下 一. 基础配置: maven导包及配置pom.xml,导包时除开springmvc的基础依赖外,需要导入文件上传下载时用到的commons-io.jsr和commons-fileupload.jar: <project xmlns="http://maven.apache.org/POM/4.0.0&

  • 详解springMVC两种方式实现多文件上传及效率比较

    springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包.需要引入的jar出了springMVC的jar包外,还需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.s

  • springMVC实现前台带进度条文件上传的示例代码

    项目框架采用spring+hibernate+springMVC如果上传文件不想使用flash那么你可以采用HTML5;截图前段模块是bootstarp框架;不废话直接来代码;spring-mvc配置文件;效果截图如下: 详细实现如下: 1.mvc-config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/s

  • Spring实现文件上传(示例代码)

    在实际开发中,经常遇到要实现文件上传到服务器端的功能.Spring可以继承commons-fileupload插件来实现文件上传的功能.分为前端JSP编写和后台Controller的编写. 前期准备工作,首先要引入commons-fileupload这个jar包,pom.xml中的配置如下: 复制代码 代码如下: <!-- 实现文件上传,spring集成了这个功能 --><dependency> <groupId>commons-fileupload</group

  • jquery.form.js框架实现文件上传功能案例解析(springmvc)

    上一篇 Bootstrap自定义文件上传下载样式(http://www.jb51.net/article/85156.htm)已经有一段时间了,一直在考虑怎么样给大家提交一篇完美的逻辑处理功能.现在我结合自己的实际工作给大家分享一下. 使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSu

  • SpringMVC文件上传 多文件上传实例

    必须明确告诉DispatcherServlet如何处理MultipartRequest.SpringMVC中提供了文件上传使用方式如下配置xxx-servlet.xml,添加如下代码: 复制代码 代码如下: <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">          <!-- 设置

  • SpringMvc导出Excel实例代码

    前言 相信很多朋友在实际工作中都会要将数据导出成Excel的需求,通常这样的做法有两种. 一是采用JXL来生成Excel,之后保存到服务器,然后在生成页面之后下载该文件. 二是使用POI来生成Excel,之后使用Stream的方式输出到前台直接下载(ps:当然也可以生成到服务器中再下载.).这里我们讨论第二种. Struts2的方式 通常我会将已经生成好的HSSFWorkbook放到一个InputStream中,然后再到xml配置文件中将返回结果更改为stream的方式.如下: private

  • Spring实现文件上传功能

    本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.0.2.RELEASE</version> </dep

  • 基于Spring实现文件上传功能

    本小节你将建立一个可以接受HTTP multi-part 文件的服务. 你将建立一个后台服务来接收文件以及前台页面来上传文件. 要利用servlet容器上传文件,你要注册一个MultipartConfigElement类,以往需要在web.xml 中配置<multipart-config>, 而在这里,你要感谢SpringBoot,一切都为你自动配置好了. 1.新建一个文件上传的Controller: 应用已经包含一些 存储文件 和 从磁盘中加载文件 的类,他们在cn.tiny77.guide

  • Spring mvc文件上传下载代码实例

    简介 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作.如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver. 前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给

  • Spring框架实现文件上传功能

    在Java中实现文件的上传有多种方式,如smartUpload或是使用Strus2,本文与大家分享使用Spring框架中的MultipartFile类来实例文件的上传. 不啰嗦了,直接上干货.先是编写了一个实现文件上传的类FileUploadingUtil,此类中定义了两个对外公开的方法,upload和getFileMap. 前者需要传入一个Map参数,是用户提交的表单中的文件列表,最终返回值的也是一个Map类型对象,其键名为上传的文件名称,键值为文件在服务器上的存储路径:后者主要是用于测试用途

  • Spring Boot 会员管理系统之处理文件上传功能

    温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难. 1. 前端部分 在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下: <form th:action="@{/admin/addMember}

  • Spring Cloud中FeignClient实现文件上传功能

    项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传文件, 百度到两种方案,一种是使用feign-form和feign-form-spring库来做,源码地址. 具体的使用方法是加入maven依赖 <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring&l

  • Spring boot实现文件上传功能

    本文实例为大家分享了Spring boot实现文件上传的具体代码,供大家参考,具体内容如下 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.0.2.RELEASE</v

  • Spring boot 实现单个或批量文件上传功能

    一:添加依赖: <!-- thymeleaf模板插件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- jsp依赖 --> <dependency> <groupId>j

  • Spring Boot 利用WebUploader进行文件上传功能

    Web Uploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+.两套运行时,同样的调用方式,可供用户任意选用.采用大文件分片并发上传,极大的提高了文件上传效率. 我们这里使用官网的一个例子来实现我们个人头像的上传. 我们的重点是在Spring Boo

  • Spring Boot简单实现文件上传功能

    目录 前言 后端处理 物理路径和虚拟路径映射 前言 前端处理 通过form表单来上传文件 提交方式为post enctype格式为"multipart/form-data" input类型为file name属性必须和Controller中方法的形参名称一致 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <titl

随机推荐