欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring实现文件上传功能

程序员文章站 2024-03-08 13:01:52
本篇文章,我们要来做一个spring的文件上传功能: 1. 创建一个maven的web工程,然后配置pom.xml文件,增加依赖:

本篇文章,我们要来做一个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了,是不是很简单啊。 

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

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