MultipartResolver bu org.springframework.web.multipart paketidan foydalanib, ko'p komponentli so'rovlarni, shu jumladan fayl yuklashni pars qilish strategiyasi hisoblanadi. Commons loyihasidan FileUploadga asoslangan birta qilingan va Servlet 3.0 ko'p komponentli so'rovlarini pars qilishga asoslangan boshqa qilingan.
Ko'p komponentli ishlov berishni faollashtirish uchun MultipartResolverni Springning DispatcherServlet konfiguratsiyasida multipartResolver nomi bilan deklaratsiya qilish kerak. DispatcherServlet uni topib, kiruvchi so'rovga tatbiq qiladi. Tarkibi multipart/form-data bo'lgan POST qabul qilingandan so'ng, tanib oluvchi tarkibini pars qiladi, joriy HttpServletRequestni MultipartHttpServletRequest sifatida o'rab, so'rov parametrlari sifatida komponentlarni ochishga qo'shimcha ravishda tanilgan fayllarga kirishni ta'minlaydi.
FileUpload Apache Commonsdan
Apache Commonsdan FileUploadni ishlatish uchun CommonsMultipartResolver turida binni multipartResolver nomi bilan konfiguratsiya qilish mumkin. Shuningdek, commons-fileupload jar-faylini classpathda dependency sifatida bo'lishi kerak.
Bu tanib oluvchi varianti ilova ichidagi mahalliy kutubxonaga vakolatlarni topshiradi, servlet konteynerlari orasida maksimal ko'p platformali ko'chuvchanlikni ta'minlaydi. Bundan tashqari, konteynerning o'z parseri yordamida standart ko'p komponentli servlet tanib olishdan foydalanish mumkin, quyida tavsiflanadi.
Commons FileUpload an'anaga ko'ra faqat POST-so'rovlarga tatbiq etiladi, lekin multipart/ tarkibining har qanday turini qabul qiladi. Tafsilotlar va konfiguratsiya parametrlarini CommonsMultipartResolver javadocda ko'ring.
Servlet 3.0
Servlet 3.0 spesifikatsiyasiga ko'p komponentli pars qilish servlet konteynerining konfiguratsiyasida faollashtirilishi zarur. Buning uchun:
-
Javada
MultipartConfigElementni servletlar ro'yxatidan o'tkazishga o'rnating. -
web.xmlda servletlar deklaratsiyasiga"<multipart-config>"bo'limini qo'shing.
Quyidagi misol MultipartConfigElementni servletlar ro'yxatidan o'tkazishni sozlashni ko'rsatadi:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// ...
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
// Shuningdek, maxFileSize, maxRequestSize, fileSizeThresholdni o'rnatadi
registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
}
}
class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
// ...
override fun customizeRegistration(registration: ServletRegistration.Dynamic) {
// Shuningdek, maxFileSize, maxRequestSize, fileSizeThresholdni o'rnatadi
registration.setMultipartConfig(MultipartConfigElement("/tmp"))
}
}
Servlet 3.0 konfiguratsiyasi yaratilgandan keyin, StandardServletMultipartResolver turida binni multipartResolver nomi bilan qo'shishingiz mumkin bo'ladi.
Bu tanib olish varianti sizning servlet konteyneringiz ko'p komponentli parseridan "hozirgi holat"da foydalanadi va ilovani konteyner ilovalari farqlariga ta'sir qilishi mumkin. Standart bo'lib, parser har qanday HTTP metodidan foydalangan holda har qanday multipart/ tarkibni pars qilishga harakat qiladi, lekin bu barcha servlet konteynerlar tomonidan qo'llab-quvvatlanmasligi mumkin. Tafsilotlar va konfiguratsiya parametrlarini StandardServletMultipartResolver javadocda ko'ring.
GO TO FULL VERSION