当前位置: 移动技术网 > IT编程>开发语言>Java > 详解SpringBoot文件上传下载和多文件上传(图文)

详解SpringBoot文件上传下载和多文件上传(图文)

2019年07月22日  | 移动技术网IT编程  | 我要评论
最近在学习springboot,以下是最近学习整理的实现文件上传下载的java代码: 1、开发环境: idea15+ maven+jdk1.8 2、

最近在学习springboot,以下是最近学习整理的实现文件上传下载的java代码:

1、开发环境:

idea15+ maven+jdk1.8

2、新建一个maven工程:

这里写图片描述 

3、工程框架

这里写图片描述 

4、pom.xml文件依赖项

<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
 xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelversion>4.0.0</modelversion>
 <groupid>springwebcontent</groupid>
 <artifactid>springwebcontent</artifactid>
 <packaging>war</packaging>
 <version>1.0-snapshot</version>
 <name>springwebcontent maven webapp</name>
 <url>http://maven.apache.org</url>
 <parent>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>1.4.3.release</version>
 </parent>
 <dependencies>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-starter-thymeleaf</artifactid>
  </dependency>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-devtools</artifactid>
   <optional>true</optional>
  </dependency>
  <dependency>
   <groupid>junit</groupid>
   <artifactid>junit</artifactid>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
 </dependencies>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <build>
  <finalname>springwebcontent</finalname>
 <plugins>
 <plugin>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-maven-plugin</artifactid>
 </plugin>
</plugins>
 </build>
</project>

5、application.java

import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
@springbootapplication
public class application {

  public static void main(string[] args) {
    springapplication.run(application.class, args);
  }
}

6、filecontroller.java

import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.bind.annotation.requestparam;
import org.slf4j.logger;
import org.slf4j.loggerfactory;
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 javax.servlet.http.httpservletresponse;
import java.io.*;
import java.util.list;

@controller
public class filecontroller {
  @requestmapping("/greeting")
  public string greeting(@requestparam(value="name", required=false, defaultvalue="world") string name, model model) {
    model.addattribute("name", name);
    return "greeting";
  }
  private static final logger logger = loggerfactory.getlogger(filecontroller.class);
  //文件上传相关代码
  @requestmapping(value = "upload")
  @responsebody
  public string upload(@requestparam("test") multipartfile file) {
    if (file.isempty()) {
      return "文件为空";
    }
    // 获取文件名
    string filename = file.getoriginalfilename();
    logger.info("上传的文件名为:" + filename);
    // 获取文件的后缀名
    string suffixname = filename.substring(filename.lastindexof("."));
    logger.info("上传的后缀名为:" + suffixname);
    // 文件上传后的路径
    string filepath = "e://test//";
    // 解决中文问题,liunx下中文路径,图片显示问题
    // filename = uuid.randomuuid() + suffixname;
    file dest = new file(filepath + filename);
    // 检测是否存在目录
    if (!dest.getparentfile().exists()) {
      dest.getparentfile().mkdirs();
    }
    try {
      file.transferto(dest);
      return "上传成功";
    } catch (illegalstateexception e) {
      e.printstacktrace();
    } catch (ioexception e) {
      e.printstacktrace();
    }
    return "上传失败";
  }

  //文件下载相关代码
  @requestmapping("/download")
  public string downloadfile(org.apache.catalina.servlet4preview.http.httpservletrequest request, httpservletresponse response){
    string filename = "fileuploadtests.java";
    if (filename != null) {
      //当前是从该工程的web-inf//file//下获取文件(该目录可以在下面一行代码配置)然后下载到c:\\users\\downloads即本机的默认下载的目录
      string realpath = request.getservletcontext().getrealpath(
          "//web-inf//");
      file file = new file(realpath, filename);
      if (file.exists()) {
        response.setcontenttype("application/force-download");// 设置强制下载不打开
        response.addheader("content-disposition",
            "attachment;filename=" + filename);// 设置文件名
        byte[] buffer = new byte[1024];
        fileinputstream fis = null;
        bufferedinputstream bis = null;
        try {
          fis = new fileinputstream(file);
          bis = new bufferedinputstream(fis);
          outputstream os = response.getoutputstream();
          int i = bis.read(buffer);
          while (i != -1) {
            os.write(buffer, 0, i);
            i = bis.read(buffer);
          }
          system.out.println("success");
        } catch (exception e) {
          e.printstacktrace();
        } finally {
          if (bis != null) {
            try {
              bis.close();
            } catch (ioexception e) {
              e.printstacktrace();
            }
          }
          if (fis != null) {
            try {
              fis.close();
            } catch (ioexception e) {
              e.printstacktrace();
            }
          }
        }
      }
    }
    return null;
  }
  //多文件上传
  @requestmapping(value = "/batch/upload", method = requestmethod.post)
  @responsebody
  public string handlefileupload(httpservletrequest request) {
    list<multipartfile> files = ((multiparthttpservletrequest) request)
        .getfiles("file");
    multipartfile file = null;
    bufferedoutputstream stream = null;
    for (int i = 0; i < files.size(); ++i) {
      file = files.get(i);
      if (!file.isempty()) {
        try {
          byte[] bytes = file.getbytes();
          stream = new bufferedoutputstream(new fileoutputstream(
              new file(file.getoriginalfilename())));
          stream.write(bytes);
          stream.close();

        } catch (exception e) {
          stream = null;
          return "you failed to upload " + i + " => "
              + e.getmessage();
        }
      } else {
        return "you failed to upload " + i
            + " because the file was empty.";
      }
    }
    return "upload successful";
  }

7、

<!doctype html>
<html lang="en">
<head>
  <title>getting started: serving web content</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<p>get your greeting <a href="/greeting" rel="external nofollow" >here</a></p>
<form action="/upload" method="post" enctype="multipart/form-data">
  文件:<input type="file" name="test"/>
  <input type="submit" />
</form>
<a href="/download" rel="external nofollow" >下载test</a>
<p>多文件上传</p>
<form method="post" enctype="multipart/form-data" action="/batch/upload">
  <p>文件1:<input type="file" name="file" /></p>
  <p>文件2:<input type="file" name="file" /></p>
  <p><input type="submit" value="上传" /></p>
</form>
</html>

完整工程地址:

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网