国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - Spring Boot 文件上傳原理解析

Spring Boot 文件上傳原理解析

2021-04-12 09:13mottled JAVA教程

Spring Boot 文件上傳原理其實就是Spring MVC,因為這部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么處理文件上傳這個過程的呢?下面通過本文給大家詳細(xì)介紹下,一起看看吧

首先我們要知道什么是Spring Boot,這里簡單說一下,Spring Boot可以看作是一個框架中的框架--->集成了各種框架,像security、jpa、data、cloud等等,它無須關(guān)心配置可以快速啟動開發(fā),有興趣可以了解下自動化配置實現(xiàn)原理,本質(zhì)上是 spring 4.0的條件化配置實現(xiàn),深拋下注解,就會看到了。

  說Spring Boot 文件上傳原理 其實就是Spring MVC,因為這部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么處理文件上傳這個過程的呢?

  圖:

Spring Boot 文件上傳原理解析

  首先項目啟動相關(guān)配置,再執(zhí)行上述第二步的時候 DispatcherServlet會去查找id為multipartResolver的Bean,在配置中看到Bean指向的是CommonsMultipartResolve,其中實現(xiàn)了MultipartResolver接口。

  第四步驟這里會判斷是否multipart文件即isMultipart方法,返回true:就會調(diào)用 multipartResolver 方法,傳遞HttpServletRequest會返回一個MultipartHttpServletRequest對象,再有DispatcherServlet進行處理到Controller層;返回false:會忽略掉,繼續(xù)傳遞HttpServletRequest。

  在MVC中需要在配置文件webApplicationContext.xml中配置 如下:

?
1
2
3
4
5
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="maxUploadSize" value="100000000"/>
    <property name="uploadTempDir" value="fileUpload/temp"/>
</bean>

  而Spring Boot已經(jīng)自動配置好,直接用就行,做個test沒什么問題。有默認(rèn)的上傳限制大小,不過在實際開發(fā)中我們還是做一些配置的,

如下在application.properties中:

?
1
2
3
4
5
6
7
8
9
# multipart config
#默認(rèn)支持文件上傳
spring.http.multipart.enabled=true
#文件上傳目錄
spring.http.multipart.location=/tmp/xunwu/images/
#最大支持文件大小
spring.http.multipart.max-file-size=4Mb
#最大支持請求大小
spring.http.multipart.max-request-size=20MB

當(dāng)然也可以寫配置類來實現(xiàn),具體的就不做展示了。

  看完上述你肯定有個大概的了解了,這里再啰嗦下,Spring提供Multipart的解析器:MultipartResolver,上述說的是CommonsMultipartResolver,它是基于Commons File Upload第三方來實現(xiàn),這也是在Servlet3.0之前的東西,3.0+之后也可以不需要依賴第三方庫,可以用StandardServletMultipartResolver,同樣也是實現(xiàn)了MultipartResolver接口,我們可以看下它的實現(xiàn):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
* Copyright 2002-2017 the original author or authors.
package org.springframework.web.multipart.support;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
/**
 * Standard implementation of the {@link MultipartResolver} interface,
 * based on the Servlet 3.0 {@link javax.servlet.http.Part} API.
 * To be added as "multipartResolver" bean to a Spring DispatcherServlet context,
 * without any extra configuration at the bean level (see below).
 *
 * <p><b>Note:</b> In order to use Servlet 3.0 based multipart parsing,
 * you need to mark the affected servlet with a "multipart-config" section in
 * {@code web.xml}, or with a {@link javax.servlet.MultipartConfigElement}
 * in programmatic servlet registration, or (in case of a custom servlet class)
 * possibly with a {@link javax.servlet.annotation.MultipartConfig} annotation
 * on your servlet class. Configuration settings such as maximum sizes or
 * storage locations need to be applied at that servlet registration level;
 * Servlet 3.0 does not allow for them to be set at the MultipartResolver level.
 *
 * @author Juergen Hoeller
 * @since 3.1
 * @see #setResolveLazily
 * @see HttpServletRequest#getParts()
 * @see org.springframework.web.multipart.commons.CommonsMultipartResolver
 */
public class StandardServletMultipartResolver implements MultipartResolver {
  private boolean resolveLazily = false;
  /**
   * Set whether to resolve the multipart request lazily at the time of
   * file or parameter access.
   * <p>Default is "false", resolving the multipart elements immediately, throwing
   * corresponding exceptions at the time of the {@link #resolveMultipart} call.
   * Switch this to "true" for lazy multipart parsing, throwing parse exceptions
   * once the application attempts to obtain multipart files or parameters.
   */
  public void setResolveLazily(boolean resolveLazily) {
    this.resolveLazily = resolveLazily;
  }
  @Override
  public boolean isMultipart(HttpServletRequest request) {
    // Same check as in Commons FileUpload...
    if (!"post".equals(request.getMethod().toLowerCase())) {
      return false;
    }
    String contentType = request.getContentType();
    return (contentType != null && contentType.toLowerCase().startsWith("multipart/"));
  }
  @Override
  public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException {
    return new StandardMultipartHttpServletRequest(request, this.resolveLazily);
  }
  @Override
  public void cleanupMultipart(MultipartHttpServletRequest request) {
    // To be on the safe side: explicitly delete the parts,
    // but only actual file parts (for Resin compatibility)
    try {
      for (Part part : request.getParts()) {
        if (request.getFile(part.getName()) != null) {
          part.delete();
        }
      }
    }
    catch (Throwable ex) {
      LogFactory.getLog(getClass()).warn("Failed to perform cleanup of multipart items", ex);
    }
  }
}

這里是之前寫的test的后者實現(xiàn)配置類,可以簡單看下,作為了解:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.bj.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.web.MultipartProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.MultipartConfigElement;
@Configuration
@EnableConfigurationProperties(MultipartProperties.class)
public class FileUploadConfig {
  private final MultipartProperties multipartProperties;
  public FileUploadConfig(MultipartProperties multipartProperties){
    this.multipartProperties=multipartProperties;
  }
  /**
   * 注冊解析器
   * @return
   */
  @Bean(name= DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
  @ConditionalOnMissingBean(MultipartResolver.class)
  public StandardServletMultipartResolver multipartResolver(){
    StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
    multipartResolver.setResolveLazily(multipartProperties.isResolveLazily());
    return multipartResolver;
  }
  /**
   * 上傳配置
   * @return
   */
  @Bean
  @ConditionalOnMissingBean
  public MultipartConfigElement multipartConfigElement(){
    return this.multipartProperties.createMultipartConfig();
  }
}

總結(jié)

以上所述是小編給大家介紹的Spring Boot 文件上傳原理解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!

原文鏈接:https://www.cnblogs.com/mottled/p/8557677.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 免费午夜电影 | 色综合天天综合网国产成人网 | 蜜桃av一区二区三区 | 欧美视频在线播放 | 欧美一区二 | 国产一区在线免费观看 | 国产精品久久久久久久浪潮网站 | 国内久久 | 成人免费视频网站在线观看 | 麻豆av一区| 国产91久久久久蜜臀青青天草二 | 欧美日韩成人 | 免费看亚洲 | av一区二区在线观看 | 性欧美精品高清 | 粉嫩欧美一区二区三区高清影视 | 精品久久久久久国产 | 影音先锋中文字幕一区 | 精精国产xxxx视频在线野外 | 欧美日日 | 国产视频久久 | 亚洲精品国精品久久99热 | 欧美日韩国产综合视频 | 色网站在线视频 | 日韩美女一级片 | 日韩综合一区二区 | 日韩免费高清在线 | 国产一区二区三区在线视频 | 日韩精品一区二区三区中文字幕 | a一级免费视频 | 久久精品美女 | 亚洲精品视 | 在线中文字幕视频 | 中文字幕日韩欧美 | 成人欧美一区二区三区在线播放 | 亚洲视频在线观看网址 | 免看一级一片 | 欧美激情亚洲 | 亚洲综合日韩欧美 | 91精品一区二区三区久久久久久 | а_天堂中文最新版地址 |