Primeiro de tudo, precisamos saber o que é a inicialização da primavera. Deixe -me falar brevemente sobre isso aqui. O Spring Boot pode ser considerado como uma estrutura em uma estrutura ---> integra várias estruturas, como segurança, JPA, dados, nuvem etc. Não precisa se preocupar com a configuração e pode começar rapidamente o desenvolvimento. Se você estiver interessado, pode entender o princípio da implementação automatizada de configuração. Em essência, é a implementação da configuração condicional do Spring 4.0. Se você deixar as apostas profundas, você verá.
O princípio do upload do arquivo de inicialização da primavera é na verdade o Spring MVC, porque essa parte do trabalho é realizada pelo Spring MVC em vez da inicialização da mola. Então, como o SpringMVC lida com o processo de upload de arquivo?
foto:
Primeiro, o projeto inicia a configuração relevante e depois executa a segunda etapa acima, o DispatcheserServlet procurará o feijão com o ID do multípartresolver. Na configuração, o feijão aponta para o CommonsmultipartResolve, que implementa a interface multípartresolver.
O quarto passo aqui determinará se o arquivo multipart é o método ismultipart. Retornar TRUE: O método multipartresolver será chamado. A passagem de HttpServletRequest retornará um objeto multipartttpServletRequest e, em seguida, um despachoServlet será processado para a camada do controlador. Retornar False: Ele será ignorado e continuará a passar por HttPServletRequest.
No MVC, você precisa configurá -lo no arquivo de configuração WebApplicationContext.xml da seguinte maneira:
<bean id = "multipartresolver"> <propriedade name = "defaultEncoding" value = "utf-8"/> <names name = "maxuploadSize" value = "100000000"/> <nome da propriedade = "uploadtempdir" value = "fileUPLOAD/temp"/> </bean>
A inicialização da primavera foi configurada automaticamente, basta usá -la diretamente, não há problema em fazer um teste. Há um tamanho de limite de upload padrão, mas no desenvolvimento real ainda fazemos algumas configurações.
O seguinte no Application.Properties:
#Multipart Config#Suporte padrão Arquivo Upload spring.http.multipart.enabled = true#File Upload Directory spring.http.multipart.Location =/tmp/xunwu/imagens/#Maximum Tamanho do arquivo suportado Spring.http.multipart.max-file-size = 4MB#Maximum supportd supports. spring.http.multipart.max-request-size = 20MB
Obviamente, você também pode escrever classes de configuração para implementá -las, e as específicas não serão exibidas.
Depois de ler o exposto, você deve ter um entendimento aproximado. Vamos falar sobre isso aqui. A primavera fornece o analisador do Multipart: multipartresolver. O exposto acima é commonsmultipartresolver. É implementado com base em um upload de arquivos de terceiros do Commons. Isso também é algo antes do Servlet 3.0. Após o 3.0+, você também não pode confiar em bibliotecas de terceiros. Você pode usar o StandardServletMultipartResolver, que também implementa a interface multípartraSolver. Podemos dar uma olhada em sua implementação:
* Copyright 2002-2017 O autor original ou autores.package org.springframework.web.multipart.support; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.part; importrequest; org.springframework.web.multipart.multipartException; importar org.springframework.web.multipart.multiparthttpServletRequest; importTrSolver;/** implementação de framelwork.web.multipart.multiPartRaRFAlT; Servlet 3.0 {@link javax.servlet.http.part} API. * A ser adicionado como bean "multípartresolver" a um contexto de despachante de mola, * sem nenhuma configuração extra no nível do feijão (veja abaixo). * * <p> <b> Nota: </b> Para usar a análise multipartidária baseada em Servlet 3.0, * você precisa marcar o servlet afetado com uma seção "multipart-config" em * {@code web.xml} ou com um {@link javax.MervLet.MultiPartConfigElement} * em um {@link javax.mertlet.multiPartConfigElement} * em um {@link javax.mertlet.multiPartConfigElement} * em um {@link javax.mertlet.multiPartConfigElement} * em um {@link Javax.Mervlet.multipletLe (MerverLetL), ou ser servidor (@link * servertlet. {@link javax.servlet.annotation.multipartConfig} anotação * Na sua classe servlet. As configurações de configuração, como tamanhos máximos ou * locais de armazenamento, precisam ser aplicados nesse nível de registro de servlet; * O Servlet 3.0 não permite que eles sejam definidos no nível multipartresolver. * * @Author Juergen Hoeller * @Since 3.1 * @See #SetResolVelAzily * @See httpServletRequest #getParts () * @see org.springframework.web.multipart.commons.CommonsmultiParTresemments */public ClassVlerStletLe resolvelazily = false; /** * Defina se deve resolver a solicitação de múltiplas solicitações preguiçosas preguiçosamente no momento do arquivo * do arquivo ou do parâmetro. * <p> O padrão é "false", resolvendo os elementos multipartida imediatamente, jogando * exceções correspondentes no momento da chamada {@link #resolVemultipart}. * Alterne isso para "True" para análise de múltiplas pontos preguiçosos, lançando exceções de análise * Depois que o aplicativo tentar obter arquivos ou parâmetros de múltiplas pontos. */ public void setResolvelazily (resolvevelazily) {this.resolvelazily = resolvelazily; } @Override public boolean ismultipart (httpServletRequest request) {// mesma verificação que no commons fileUpload ... if (! "Post" .equals (request.getMethod (). TolowerCase ())) {return false; } String contentType = request.getContentType (); return (contentType! = null && contenttype.tolowercase (). startSwith ("multipart/")); } @Override public multipartttpServletRequest Resolvemultipart (solicitação httpServletRequest) lança multipartxception {return standardMultiparthttpServletRequest (solicitação, this.Resolvelazily); } @Override public void CleanUpMultipart (multiparthttpServletRequest Request) {// para estar no lado seguro: Exclua explicitamente as partes, // mas apenas peças de arquivo reais (para compatibilidade de resina) tente {para (parte da parte: request.getparts ()) {if (solicitação.getFile (Part.Ter.NenNenNenNenNaMen (Part.Get (Part.Get. }}} Catch (throwable ex) {LogFactory.getLog (getClass ()). }}}Aqui está a última classe de configuração de implementação do teste que escrevi antes. Você pode dar uma olhada brevemente para entender:
pacote com.bj.config; importar org.springframework.boot.autoconfigure.condition.conditionalonMissingBean; importar org.springframework.boot.autoconfigure.web.multipartProperties; import.springfri-frigure.web.multipartProperties; importação.sPringFramwerwork.Boot.Boot.Boot.MultiPtortsTroports; org.springframework.context.annotation.bean; importar org.springframework.context.annotation.configuration; importar org.springframework.web.multipart.multipartResolver; importação; org.springframework.web.servlet.dispatcherServlet; import javax.servlet.multipartconfigElement;@confguration@enableConfigurationproperties (multipartProperties.class) public Class fileUploadConfig {private multipartProperties multipartProties; public fileUploadConfig (MultipartProperties multipartProperties) {this.multipartProperties = multipartproperties; } /** * Register parser* @return */ @Bean(name= DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) @ConditionalOnMissingBean(MultipartResolver.class) public StandardServletMultipartResolver multipartResolver(){ StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver (); multipartresolver.setResolvelazily (multipartproperties.isresolvelazily ()); retornar multipartresolver; } / *** CONFIGURAÇÃO DE APARGA* @RETURN* / @Bean @conditionalonMissingBean public multipartconfigElement multipartconfigElement () {return this.multipartProperties.createMultipartConfig (); }}Resumir
O acima é o princípio do arquivo de inicialização do Spring Boot, introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!