まず第一に、スプリングブーツが何であるかを知る必要があります。ここで簡単に話しましょう。 Spring Bootは、フレームワークのフレームワークと見なすことができます--->セキュリティ、JPA、データ、クラウドなどのさまざまなフレームワークを統合します。構成を気にする必要はなく、開発を迅速に開始できます。興味がある場合は、自動構成実装の原則を理解できます。本質的に、それはスプリング4.0の条件付き構成実装です。賭けを深くしておくと、表示されます。
スプリングブートファイルのアップロードの原理は、実際にはスプリングMVCです。これは、作業のこの部分がスプリングブートではなくスプリングMVCによって行われるためです。では、SpringMVCはファイルのアップロードプロセスをどのように処理しますか?
写真:
最初に、プロジェクトは関連する構成を開始し、次に上記の2番目のステップを実行すると、DispatcherServletはMultiPartresolverのIDでBeanを探します。構成では、BeanはMultiPartresolverインターフェイスを実装するCommonsMultipartresolveを指します。
ここでの4番目のステップでは、マルチパートファイルがiSMultIPARTメソッドであるかどうかを決定します。 trueを返す:MultiPartresolverメソッドが呼び出されます。 httpservletrequestを通過すると、multiparthttpservletrequestオブジェクトが返され、ディスパッチャーサーブレットがコントローラーレイヤーに処理されます。 falseを返す:それは無視され、httpservletrequestを通過し続けます。
MVCでは、次のように構成ファイルWebApplicationContext.xmlで構成する必要があります。
<bean id = "multipartresolver"> <プロパティ名= "defaultencoding" value = "utf-8"/> <プロパティ名= "value =" 100000000 "/> <プロパティ名=" uploadtempdir "uploadtempdir" value = "fileupload/temp"/> </bean>>
Spring Bootは自動的に構成されています。直接使用するだけで、テストを行うことに問題はありません。デフォルトのアップロード制限サイズがありますが、実際の開発では、いくつかの構成を作成します。
Application.Propertiesで次のように:
#マルチパート構成#デフォルトサポートファイルspring.http.multipart.enabled = true#ファイルspring.http.multipart.location =/tmp/xunwu/images/#サポートされたファイルサイズspring.http.multipart.max-file-size = 4mb
もちろん、構成クラスを作成してそれらを実装することもできます。特定のクラスは表示されません。
上記を読んだ後、大まかな理解が必要です。ここでそれについて話しましょう。 SpringはMultiPartのパーサー:MultiPartresolverを提供します。上記はcommonsmultipartresolverです。コモンズファイルのサードパーティのアップロードに基づいて実装されています。これは、サーブレット3.0の前のものでもあります。 3.0+の後、サードパーティライブラリに頼ることもできません。 StartnServletmultipartresolverを使用できます。これは、MultiPartresolverインターフェイスも実装しています。その実装を見ることができます。
* Copyright 2002-2017元の著者または著者。packageorg.springframework.web.multipart.support; Import javax.servlet.servlet.servlet.httpservletrequest; Import javax.servlet.http.part; Import org.logging.logging.logging.logging.logging.logging.logging.logging。 org.springframework.web.multipart.multipartexception; Import org.springframework.web.multipart.multiparthttpservletrequest; import org.springframework.web.multipart.multipartreSolver; 3.0 {@link javax.servlet.http.part} api。 *「MultiPartresolver」Beanとして、Beanレベルに追加の構成なしで、Spring DispatcherServletコンテキストに追加されます(以下を参照)。 * * <p> <b>注:</b>サーブレット3.0ベースのマルチパート解析を使用するには、 * @code web.xml}の「Multipart-config」セクションで影響を受けたサーブレットをマークする必要があります。 {@link javax.servlet.annotation.multipartconfig} annotation *サーブレットクラス。最大サイズや *ストレージの場所などの構成設定は、そのサーブレット登録レベルで適用する必要があります。 *サーブレット3.0は、それらをMultiPartresolverレベルに設定することを許可していません。 * * @Author Juergen Hoeller * @since 3.1 * @see #setResolvelazily * @see httpservletrequest#getParts() * @see org.springframework.web.multipart.commons.commonsmultipartresolver */公開クラスResolvelazily = false; /** * *ファイルまたはパラメーターアクセスの時点で、マルチパートリクエストの怠zyリクエストを怠zyに解決するかどうかを設定します。 * <p>デフォルトは「false」であり、マルチパート要素をすぐに解決し、{@link #resolvemultipart}呼び出し時に対応する例外をスローします。 *これを怠zyなマルチパートの解析のために「true」に切り替え、分析の例外をスローします *アプリケーションがマルチパートファイルまたはパラメーターを取得しようとすると。 */ public void setResolvelazily(boolean resoclevelazily){this.resolvelazily = Resolvelazily; } @Override public boolean ismultipart(httpservletrequest request){// commons fileupload ... if(! "post" .equals(request.getmethod()。tolowercase()))の場合と同じチェック} string contentType = request.getContentType(); return(contentType!= null && contentType.tolowercase()。startswith( "multipart/")); } @Override public MultiParthtttservletrequest Resolvemultipart(httpservletrequest request)Throws multipartexception {return new StandardMultiParthTTPSERVLETREQUEST(request、this.Resolvelazily); } @Override public void cleanupmultipart(multiparthttpservletrequest request){//セーフサイドにある:// //実際のファイルパーツのみ(樹脂互換性の場合)try {for(part:request.getParts()){if(request.getname(){part.getname()! }}} catch(throwable ex){logfactory.getLog(getClass())。WARN( "MultiPartアイテムのクリーンアップに失敗しました"、ex); }}}これは、私が以前に書いたテストの後者の実装構成クラスです。あなたはそれを簡単に見て理解することができます:
パッケージcom.bj.config; import org.springframework.boot.autoconfigure.conditionalonmissingbean; Import org.springframework.boot.autoconfigure.web.multipartproperties; Import org.spring.context.context.context.context.context.context.context.context.context.context.context.cont springframework.context.annotation.bean; Import org.springframework.context.annotation.configuration; Import org.springframework.web.multipartresolver; Import org.springframework.web.web.multiport.Support.Standardervertipartrestrtertrestipartipart.Support.Standardertipartipartipartipart org.springframework.web.servlet.dispatcherservlet; Import javax.servlet.servlet.multipartconfigelement;@configuration@enableconfigurationProperties(MultipartProperties.class)public class fileuploadconfig {private final multipartporties multipartproperties; public fileuploadconfig(multipartproperties multipartproperties){this.multipartproperties = multipartproperties; } / *** Register Parser* @return* / @bean(name = dispatcherservlet.multipart_resolver_bean_name)@conditionalonmissingbean(multipartresolver.class)public Standardservletmultipartresolver MultipartreSolver startenservletmultipartresolver(); MultiPartresolver.setResolvelazily(MultiPartProperties.isresolvelazily()); MultiPartresolverを返します。 } / *** configuration* @return* / @bean @conditionalonmissingbean public multipartconfigelement multipartconfigelement(){return this.multipartproperties.createmultipartconfig(); }}要約します
上記は、エディターが導入したスプリングブートファイルのアップロードの原則です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!