1. Deskripsi singkat
Data dalam format multipart membagi bentuk menjadi beberapa bagian, masing -masing bagian yang sesuai dengan bidang input. Di bidang input bentuk umum, data tipe teks akan ditempatkan di bagian yang sesuai, tetapi jika suatu file diunggah, bagian yang sesuai dapat menjadi biner. Mirip dengan ini:
2. Konfigurasikan parser multipart
Meskipun permintaan multipart mungkin tampak rumit, mudah untuk menanganinya di Spring MVC. Sebelum menulis metode pengontrol untuk menangani unggahan file, kita harus mengkonfigurasi parser multipart untuk memberi tahu DispatcherServlet cara membaca permintaan multipart.
Spring memiliki dua implementasi multipartresolver:
Konfigurasi StandardServletMultiPartresolver:
1. Pernyataan Bean:
Konfigurasi di ApplicationContext.xml
Salinan kode adalah sebagai berikut: <bean id = "multipartresolver" kuas: java; "> @bean (name =" multipartresolver ") Public StandardServletMultiPartresolver GetStandardServletMultiPartresolver () {Return New StandardServletMultiparResolver ();
Kiat: Nama parser multipart harus berupa multipartresolver, jika tidak kesalahan akan dilaporkan.
2. Konfigurasikan Parameter Unggah:
* Konfigurasi Web.xml
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup> 1 </load-on-startup> <bultipart-config> <!-Unggah ke/TMP/Unggah Direktori-> <cocation>/tmp/unggah </location> <!-Ukuran file adalah 2m-> <Max-File-Size> 2097152 </Max-File-Size> <! Seluruh permintaan tidak. <max-request-size>4194304</max-request-size> <!--All files must be written to disk--> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
* Konfigurasi di kelas konfigurasi
Diwarisi di kelas konfigurasi AbstractAnnotationConfigDispatcherServletInitializer
@Override Protected Void Customizeregistration (servletregistration.dynamic Registration) {// Unggah ke direktori /tmp /unggah, ukuran file adalah 2m, seluruh permintaan tidak melebihi 4m, dan semua file harus ditulis untuk pendaftaran disk. MultipartConfigElement ("e: // unggah_ftp", 2097152,4194304,0)); }Konfigurasi CommonsMultiPartresolver:
1. Deklarasikan kacang dan konfigurasikan parameter unggah
<bean id = "multipartresolver"> <!-atur direktori unggah/tmp/unggah; Kapasitas file maksimum diatur ke 2m; Ukuran memori maksimum diatur ke 0, yang berarti bahwa semua file akan ditulis ke disk; Kapasitas maksimum keseluruhan permintaan multipar tidak dapat diatur-> <name properti = "unggahTempDir" value = "/tmp/unggah"/> <name properti = "maxuploadsize" value = "2097152"/> <name properti = "maxInmemorySize" value = "0"/</bean>
Perbedaannya:
1. Commonsmultipartresolver Dibandingkan dengan StandardServletmultipartresolver, tidak mungkin untuk menetapkan kapasitas maksimum keseluruhan permintaan multipart.
2. Commonsmultipartresolver tidak memaksa mengatur jalur file sementara. Secara default, jalur ini adalah direktori sementara dari wadah servlet. StandardServletMultiPartresolver harus mengatur jalur file sementara untuk dieksekusi secara normal. (Direktori yang diunggah yang disebutkan di atas adalah semua jalur file sementara)
3. SpringMVC menangani permintaan
1. Formulir Formulir Front-End
<Form Action = "/Picture" Method = "POST" ENCTYPE = "Multipart/Form-Data"> <input type = "file" name = "picture"> <input type = "kirim"> </form>
Kiat: enctype = "multipart/form-data" perlu diatur untuk memberi tahu SpringMVC bahwa ini adalah permintaan multipart.
2. Backend MVC menerima permintaan
@RequestMapping (value = "/picture", Method = requestMethod.post) Public String getHome (@RequestPart ("Picture") MultipartFile Picture) melempar ioException {string name = picture.getName (); byte [] bytes = picture.getbytes (); picture.transferto (file baru ("/"+picture.getoriginalFileName ())); // Saat menyimpan ke sistem file di sini, gunakan jalur relatif, misalnya, konfigurasi di sini adalah /. Berdasarkan direktori unggahan yang dikonfigurasi. Artinya, jalur file e:/ unggah_ftp/ adalah pengembalian direktori yang disimpan "home"; }Kiat: 1. @RequestPart ("gambar"): Ketika formulir pendaftaran diajukan, atribut esensi akan memberikan array byte, yang berisi data bagian yang sesuai dalam permintaan (ditentukan melalui @RequestPart). Jika pengguna mengirimkan formulir tanpa memilih file, array akan kosong (bukan nol). Jadi kita bahkan dapat menggunakan array byte [] untuk menerima permintaan multipart alih -alih multipartfile.
2. MultipartFile: Menggunakan metode multipartfile untuk menerima memberi kami banyak metode untuk melakukan pekerjaan berikutnya ...
3. Terima file yang diunggah dalam bentuk bagian
Sedangkan untuk subjek, tidak ada banyak perbedaan antara antarmuka bagian dan multipartfile. Dalam banyak kasus, nama metode bagian persis sama dengan nama metode MultipartFile. Ada beberapa kesamaan, tetapi sedikit berbeda, seperti getsubmittedFileName () yang sesuai dengan getoriginalFileName (). Demikian pula, write () sesuai dengan transferto (), dan dengan bantuan metode ini kami dapat menulis file yang diunggah ke sistem file.
Perlu disebutkan bahwa jika Anda menerima unggahan file melalui parameter bagian saat menulis metode pengontrol, maka tidak perlu mengatur multipartresolver. Hanya saat menggunakan MultipartFile, kita memerlukan multipartresolver.
@RequestMapping (value = "/picture", Method = requestMethod.post) Public String getHome (@RequestPart ("Picture") Picture Picture) melempar ioException {picture.write ("/"+picture.getSubmittedFileName ()); kembali "rumah"; }Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.