`
rensanning
  • 浏览: 3552602 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38217
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607596
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682776
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89532
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402144
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69760
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91835
社区版块
存档分类
最新评论

Spring Boot 入门 - 基础篇(9)- 文件上传下载

 
阅读更多
(1)单文件上传
Form方式
<form id="data_upload_form" action="file/upload" enctype="multipart/form-data" method="post">
  <input type="file" id="upload_file" name="upload_file" required="" />
  <input id="data_upload_button" type="submit" value="上传" />
</form>


Ajax方式
$(function(){
  $("#data_upload_button").click(function(event){
    event.preventDefault();
    if(window.FormData){
      var formData = new FormData($(this)[0]);
        $.ajax({
          type : "POST",
          url  : "file/upload",
          dataType : "text",
          data : formData,
          processData : false,
          contentType: false,
        }).done(function(data) {
          alert("OK");
        }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
          alert("NG");
        });
      }else{
        alert("No Support");
      }
    }
  });
});


@PostMapping("/file/upload")
public void upload(@RequestParam("upload_file") MultipartFile multipartFile) {

  if(multipartFile.isEmpty()){
    return;
  }

  File file = new File("d://" + multipartFile.getOriginalFilename());
  multipartFile.transferTo(file);

}


(2)多文件上传
<form id="data_upload_form" action="file/uploads" enctype="multipart/form-data" method="post">
  <input type="file" id="upload_files" name="upload_files" required="" />
  <input type="file" id="upload_files" name="upload_files" required="" />
  <input type="file" id="upload_files" name="upload_files" required="" />
  <input id="data_upload_button" type="submit" value="上传" />
</form>


@PostMapping("/file/uploads")
public void upload(@RequestParam("upload_files") MultipartFile[] uploadingFiles) {

  for(MultipartFile uploadedFile : uploadingFiles) {
    File file = new File("d://" + uploadedFile.getOriginalFilename());
    uploadedFile.transferTo(file);
  }

}


(3)上传文件大小限制
src/main/resources/application.properties
引用
spring.http.multipart.location=${java.io.tmpdir}
spring.http.multipart.max-file-size=1MB # 单文件大小
spring.http.multipart.max-request-size=10MB # 一次请求的多个文件大小


Nginx的nginx,conf
client_max_body_size 默认是1m,设置为0时,Nginx会跳过验证POST请求数据的大小。
引用
http {
    # ...
    server {
        # ...
        location / {
            client_max_body_size  10m;
        }
        # ...
    }
    # ...
}


Tomcat的server.xml
引用
maxPostSize URL参数的最大长度,-1(小于0)为禁用这个属性,默认为2m
maxParameterCount 参数的最大长度,超出长度的参数将被忽略,0表示没有限制,默认值为10000
maxSwallowSize 最大请求体字节数,-1(小于0)为禁用这个属性,默认为2m


Tomcat 7.0.55之后的版本添加了 maxSwallowSize 参数,默认是2m。maxPostSize对「multipart/form-data」请求不再有效。
<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    useBodyEncodingForURI="true"
    maxSwallowSize="-1" />


@Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
    return new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected void customizeConnector(Connector connector) {
            super.customizeConnector(connector);
            if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
                ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
            }
        }
    };
}


(4)文件下载(CSV/Excel/PDF)

CSV文件
@RequestMapping(value = "/downloadCSV", method = RequestMethod.GET)
public ResponseEntity<byte[]> downloadCSV() throws IOException {
   HttpHeaders h = new HttpHeaders();
   h.add("Content-Type", "text/csv; charset=GBK");
   h.setContentDispositionFormData("filename", "foobar.csv");
   return new ResponseEntity<>("a,b,c,d,e".getBytes("GBK"), h, HttpStatus.OK);
}


PDF文件(采用iText生成PDF)
iText具体如何使用参考这里:Java操作PDF之iText超入门
org.springframework.web.servlet.view.document.AbstractPdfView

@Component
public class SamplePdfView extends AbstractPdfView {

  @Override
  protected void buildPdfDocument(Map<String, Object> model,
          Document document, PdfWriter writer, HttpServletRequest request,
          HttpServletResponse response) throws Exception {
      document.add(new Paragraph((Date) model.get("serverTime")).toString());
  }
}

@RequestMapping(value = "exportPdf", method = RequestMethod.GET)
public String exportPdf(Model model) {
   model.addAttribute("serverTime", new Date());
   return "samplePdfView";
}


Excel文件(采用Apache POI生成EXCEL)
POI具体如何使用参考这里:Java读写Excel之POI超入门
org.springframework.web.servlet.view.document.AbstractExcelView

@Component
public class SampleExcelView extends AbstractExcelView {

    @Override
    protected void buildExcelDocument(Map<String, Object> model,
            HSSFWorkbook workbook, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        HSSFSheet sheet;
        HSSFCell cell;

        sheet = workbook.createSheet("Spring");
        sheet.setDefaultColumnWidth(12);

        cell = getCell(sheet, 0, 0);
        setText(cell, "Spring Excel test");

        cell = getCell(sheet, 2, 0);
        setText(cell, (Date) model.get("serverTime")).toString());
    }
}

@RequestMapping(value = "exportExcel", method = RequestMethod.GET)
public String exportExcel(Model model) {
  model.addAttribute("serverTime", new Date());
  return "sampleExcelView";
}


任意文件
@Component
public class TextFileDownloadView extends AbstractFileDownloadView {

   @Override
   protected InputStream getInputStream(Map<String, Object> model,
           HttpServletRequest request) throws IOException {
       Resource resource = new ClassPathResource("abc.txt");
       return resource.getInputStream();
   }

   @Override
   protected void addResponseHeader(Map<String, Object> model,
           HttpServletRequest request, HttpServletResponse response) {
       response.setHeader("Content-Disposition", "attachment; filename=abc.txt");
       response.setContentType("text/plain");

   }
}

@RequestMapping(value = "/downloadTxt", method = RequestMethod.GET)
public String downloadTxt1() {
    return "textFileDownloadView";
}


本地文件
@RequestMapping(value = "/downloadTxt2", produces = MediaType.TEXT_PLAIN_VALUE)
public Resource downloadTxt2() {
  return new FileSystemResource("abc.txt");
}


(5)异常处理
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ModelAndView handleMaxUploadSizeExceededException(HttpServletRequest req, Exception ex) {
	ModelAndView model = new ModelAndView("error/fileSizeExceeded");
	
	Throwable t = ((MaxUploadSizeExceededException)ex).getCause();
	if (t instanceof FileUploadBase.FileSizeLimitExceededException) {
		FileUploadBase.FileSizeLimitExceededException s = (FileUploadBase.FileSizeLimitExceededException)t;
		// ...
	} 
	if (t instanceof FileUploadBase.SizeLimitExceededException) {
		FileUploadBase.SizeLimitExceededException s = (FileUploadBase.SizeLimitExceededException)t;
		// ...
	} 
	
	return model;
}
分享到:
评论

相关推荐

    Spring Boot 入门 - 基础篇(11)- 数据源配置

    在本篇“Spring Boot入门 - 基础篇(11)- 数据源配置”中,我们将探讨如何在Spring Boot项目中配置数据源,以便连接到数据库并执行相关的CRUD操作。Spring Boot以其自动化配置和简化开发流程而受到广泛欢迎,它使得...

    spring boot入门的第一个项目

    本篇文章将深入探讨Spring Boot入门项目的构建过程,以及它如何与微服务和分布式系统相结合。 **1. Spring Boot基础知识** Spring Boot 的核心理念是“约定优于配置”。它通过内置的Tomcat服务器、自动配置的Spring...

    spring-boot-study-base.zip

    总的来说,"spring-boot-study-base.zip"是一个很好的Spring Boot入门教程,它涵盖了从基础到实践的关键知识点。通过学习和实践,你可以快速掌握Spring Boot的精髓,从而在实际开发中提高效率,构建出更加健壮和灵活...

    dbApi-spring-boot-starter-demo:dbApi-spring-boot-starter案例代码

    本篇将深入探讨dbApi-spring-boot-starter的使用,结合提供的"dbApi-spring-boot-starter-demo"案例代码,帮助开发者理解和实践这一工具。 一、dbApi-spring-boot-starter简介 dbApi-spring-boot-starter的核心...

    spring-boot-study-master.zip

    Spring Boot支持文件上传功能,可以使用MultipartFile接口处理文件上传请求,结合Commons Multipart Resolver等组件,实现文件的上传、存储和下载。 通过以上各模块的学习和实践,读者将能够全面理解Spring Boot的...

    spring boot入门篇demo+ppt

    在"spring boot入门篇demo+ppt"中,我们可以期待学习以下核心知识点: 1. **Spring Boot基础知识**:了解Spring Boot的基本概念,包括其设计目标、主要特性以及与其他Spring框架的关系。 2. **起步依赖(Starter)...

    Spring boot 入门实例

    ### 二、Spring Boot入门实例步骤 #### 1. 创建项目 首先,我们需要一个支持Spring Boot的IDE,如IntelliJ IDEA。然后,通过IDE的新建项目向导,选择Spring Initializr来创建一个新的Spring Boot项目。在这个向导...

    spring boot入门ppt和代码

    接下来,我们来看 `spring boot入门篇.pptx`,这个PPT很可能是对Spring Boot基础知识的详细讲解,可能包括以下内容: 1. **Spring Boot简介**:介绍Spring Boot的诞生背景、目标以及主要特点。 2. **环境准备**:...

    Spring Boot 笔记1

    在本篇Spring Boot笔记中,我们将探讨Spring Boot的核心特性、如何创建一个简单的Spring Boot应用以及相关的Maven配置。Spring Boot是Spring框架的一个扩展,旨在简化Spring应用的初始搭建以及开发过程,提供了一种...

    01-SpringBoot基础篇

    以上是 Spring Boot 基础篇的知识点,包括 Spring Boot 简介、快速上手 Spring Boot、Spring Boot 入门案例、parent starter 引导类、内嵌 Tomcat 基础配置、配置属性配置、yaml 文件语法规则、yaml 数据读取、整合...

    Spring Boot官方文档pdf

    ### Spring Boot 官方文档知识点总结 #### 一、Spring Boot 概览 - **Spring Boot** 是一种基于 Java 的框架,它简化了基于 Spring 的应用程序的开发过程。 - **版本**: 此文档对应的版本为 **2.1.4.RELEASE**。 -...

    Spring boot(一): 入门篇.rar_springboot

    通过阅读 "Spring boot(一): 入门篇.pdf" 和 "Spring boot(二):web综合开发.pdf",你可以深入了解 Spring Boot 的基本概念、快速上手指南以及如何进行 Web 应用的综合开发。这些资料将引导你从初识 Spring Boot 到...

    Spring Boot核心技术-笔记

    本篇笔记将介绍Spring Boot的核心概念、微服务架构、环境准备、入门案例以及相关开发工具的配置方法。 1. Spring Boot简介 Spring Boot是由Pivotal团队提供的开源框架,它使用“约定优于配置”的原则,旨在简化...

    [E文]Spring Boot 2 Recipes

    - **基础篇**:介绍 Spring Boot 的基本概念、安装和配置等基础知识。 - **进阶篇**:探讨如何利用 Spring Boot 构建复杂的应用程序,包括安全性和性能优化等方面。 - **实践篇**:提供一系列实战案例,涵盖微服务...

    spring boot搭建(二)

    在上一部分中,我们可能已经介绍了Spring Boot的基础知识和快速入门。在此阶段,我们将更进一步,通过代码示例深入了解Spring Boot的核心特性以及如何集成常用的数据库连接池Druid和SQL监控工具P6Spy。 首先,...

    1、Spring Boot干货系列:(一)优雅的入门篇.docx

    为了更好地理解和掌握 Spring Boot,本文将围绕其入门篇进行详细介绍。 #### 二、Spring Boot 的核心价值 1. **自动配置**:Spring Boot 提供了一系列的自动配置选项,这意味着开发者无需编写大量的配置代码,框架...

    spring boot实践学习案例,是spring boot初学者及核心技术巩固的最佳实践 .zip

    一、支持泥瓦匠关注泥瓦匠个人博客的更新我的博客-分享学习可落地的技术博文Spring Boot 2.x系列教程,spring boot实践学习案例,是...错误处理Spring Boot 2 快速教程WebFlux 系列教程大纲(一)『 基础 - 入门篇 』S

    springboot基础篇视频资料1-20

    "基础篇-14-基础配置.mp4"是理解Spring Boot配置文件的关键,讲解了application.properties或application.yml的使用,以及如何进行环境变量的配置。"基础篇-18-yaml数据格式.mp4"专门针对YAML数据格式进行了讲解,...

    springBoot笔记二-来自于百度文库1

    在本篇【springBoot笔记二-来自于百度文库1】中,主要讲解了Spring Boot的基础概念、核心特性以及如何创建一个简单的Spring Boot项目。以下是详细的知识点解析: 1. **Spring Boot简介**: - Spring Boot是Spring...

    spring-security3 入门篇

    本入门篇将介绍Spring Security的基础知识,包括其核心概念、配置以及如何在实际项目中使用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证是Spring Security的基础,它确认用户的身份是否合法。...

Global site tag (gtag.js) - Google Analytics