Pertama -tama, kita perlu tahu apa itu boot musim semi. Izinkan saya membicarakannya secara singkat di sini. Spring Boot dapat dianggap sebagai kerangka kerja dalam kerangka kerja ---> mengintegrasikan berbagai kerangka kerja, seperti keamanan, JPA, data, cloud, dll. Tidak perlu peduli dengan konfigurasi dan dapat dengan cepat memulai pengembangan. Jika Anda tertarik, Anda dapat memahami prinsip implementasi konfigurasi otomatis. Intinya, ini adalah implementasi konfigurasi bersyarat dari Spring 4.0. Jika Anda meninggalkan taruhan dalam, Anda akan melihatnya.
Prinsip Upload File Boot Spring sebenarnya adalah Spring MVC, karena bagian pekerjaan ini dilakukan oleh Spring MVC daripada Spring Boot. Jadi, bagaimana SpringMVC menangani proses unggahan file?
gambar:
Pertama, proyek memulai konfigurasi yang relevan, dan kemudian melakukan langkah kedua di atas, DispatcherServlet akan mencari kacang dengan ID multipartresolver. Dalam konfigurasi, kacang menunjuk ke Commonsmultipartresolve, yang mengimplementasikan antarmuka multipartresolver.
Langkah keempat di sini akan menentukan apakah file multipart adalah metode IsMultipart. Return True: Metode multipartresolver akan dipanggil. Melewati httpservletRequest akan mengembalikan objek multiparthtpservletRequest, dan kemudian dispatcherServlet akan diproses ke lapisan pengontrol. Return False: Ini akan diabaikan dan terus lulus httpservletRequest.
Di MVC, Anda perlu mengonfigurasinya di file konfigurasi WebApplicationContext.xml sebagai berikut:
<bean id = "multipartresolver"> <name properti = "DefaultEncoding" value = "UTF-8"/> <name properti = "MAXUPLOADSIZE" Value = "100000000"/> <nama properti = "unggahtempdir" value = "Fileupload/Temp"/</bean> "
Spring Boot telah dikonfigurasi secara otomatis, cukup gunakan secara langsung, tidak ada masalah dengan membuat tes. Ada ukuran batas unggahan default, tetapi dalam pengembangan aktual kami masih membuat beberapa konfigurasi.
Sebagai berikut di Application.Properties:
#Multipart Config#Default Dukungan File Upload Spring.http.multipart.enabled = True#File Unggah Direktori Spring.http.multipart.location =/tmp/xunwu/gambar/#ukuran file yang didukung Maksimum. spring.http.multipart.max-request-size = 20MB
Tentu saja, Anda juga dapat menulis kelas konfigurasi untuk mengimplementasikannya, dan yang spesifik tidak akan ditampilkan.
Setelah membaca di atas, Anda harus memiliki pemahaman yang kasar. Mari kita bicarakan di sini. Spring menyediakan parser Multipart: multipartresolver. Di atas adalah Commonsmultipartresolver. Ini diimplementasikan berdasarkan unggahan file Commons pihak ketiga. Ini juga sesuatu sebelum Servlet 3.0. Setelah 3.0+, Anda juga tidak dapat mengandalkan perpustakaan pihak ketiga. Anda dapat menggunakan StandardServletMultiPartresolver, yang juga mengimplementasikan antarmuka multipartresolver. Kita dapat melihat implementasinya:
* Hak Cipta 2002-2017 Penulis asli atau penulis.Package org.springframework.web.multipart.support; import javax.servlet.http.httpservletrequest; import javax.servlet.http.part; impor org.apache.commons.commons.servlet org.springframework.web.multipart.multipartException; impor org.springframework.web.multipart.multiparttpservletrequest; impor org.spramework.web.multipartResolver; 3.0 {@link javax.servlet.http.part} API. * Untuk ditambahkan sebagai kacang "multipartresolver" ke konteks Spring DispatcherServlet, * tanpa konfigurasi tambahan di tingkat kacang (lihat di bawah). * * <p> <b> Catatan: </b> Untuk menggunakan parsing multipart berbasis servlet 3.0, * Anda perlu menandai servlet yang terkena dampak dengan bagian "multipart-config" di * {@code web.xml}, atau class class or (layanan a, class@@link in ligin (layanan a, {@link javax.servlet.annotation.multipartconfig} anotasi * di kelas servlet Anda. Pengaturan konfigurasi seperti ukuran maksimum atau * lokasi penyimpanan perlu diterapkan pada tingkat pendaftaran servlet; * Servlet 3.0 tidak memungkinkan mereka diatur pada level multipartresolver. * * @author juergen hoeller * @since 3.1 * @see #setresolvelazily * @see httpservletrequest #getparts () * @see org.springframework resolvelazily = false; /** * Tetapkan apakah akan menyelesaikan permintaan Multipart permintaan malas malas pada saat * file atau parameter akses. * <p> Default adalah "false", menyelesaikan elemen multipart segera, melempar * pengecualian yang sesuai pada saat panggilan {@link #resolvemultipart}. * Ganti ini ke "true" untuk parsing multipart malas, melempar pengecualian parse * Setelah aplikasi mencoba untuk mendapatkan file atau parameter multipart. */ public void setResolvelazily (boolean resolvelazily) {this.resolvelazily = resolvelazily; } @Override public boolean ismultipart (httpservletrequest request) {// Periksa sama seperti di 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 (permintaan httpservletRequest) melempar MultipartException {return New StandardMultipartTtpservletRequest (permintaan, this.resolvelazily); } @Override public void cleanupmultipart (multiparthttpservletrequest request) {// untuk berada di sisi aman: secara eksplisit menghapus bagian, // tetapi hanya bagian file aktual (untuk kompatibilitas resin) coba {untuk bagian: permintaan. }}} catch (throwable ex) {logfactory.getLog (getClass ()). warn ("gagal melakukan pembersihan item multipart", ex); }}}Berikut adalah kelas konfigurasi implementasi yang terakhir dari tes yang saya tulis sebelumnya. Anda dapat melihatnya secara singkat untuk memahami:
Paket com.bj.config; impor org.springframework.boot.autoconfigure.condition.conditionalonmissingbean; impor org.springframework.boot.springfigure.beb.multiPartRixties; import org.spramework.boot.beb.multiponxter; org.springframework.context.annotation.bean; impor org.springframework.context.annotation.configuration; Impor org.springframework.web.multipart.multiparport; Imporportmullaysmultardsmult. org.springframework.web.servlet.dispatcherServlet; import javax.servlet.multipartconfigeLement;@configuration@enableConfigurationProperties (multiproperties.clasties.class) kelas publik FileuploadConfig {private final multiproPerties multiproPerties; Kelas publik; Public FileUploadConfig (MultiPartProperties MultipartProperties) {this.multipartProperties = multipartProperties; } / *** Register parser* @return* / @bean (name = DispatcherServlet.multipart_resolver_bean_name) @conditionAlonMissingBean (multipartresolver.classservletmulvulvolver = Multipartresolver () {standardservletmullver = Multipartresolver () {standardservletmultrePartresolver = StandardServletmultipartresolver (); multipartresolver.setresolvelazily (multipartproperties.isresolvelazily ()); mengembalikan multipartresolver; } / *** Unggah konfigurasi* @return* / @bean @conditionAnonMissingBean Publik multipartConfigElement multipartConfigElement () {return this.multipartproperties.createMultipartConfig (); }}Meringkaskan
Di atas adalah prinsip pengunggahan file boot musim semi yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!