بارگذاری فایل – Spring MVC

بارگذاری فایل با استفاده از Spring بسیار آسان است. شما می توانید از بین بسته Jakarta Commons FileUpload (http://jakarta.apache.org/commons/fileupload) و بسته O’Reilly Servlet (COS) (http://servlets.com/cos/index.html)، یکی را برای این کار انتخاب کنید. بسته دومی تحت مقررات Buy-ABook قرار دارد. (قبل از استفاده از این بسته، مطمئن شوید که شرایط را خوانده و درک کرده اید.) با استفاده از هر یک از این دو بسته، دسترسی به فایل های بارگذاری شده با استفاده از مرورگر، به روشی مشابهی انجام می شود. تنها تفاوت بین این دو بسته، در روشی است که به به اصطلاح multipart resolver در متن برنامه شما پیکربندی می شود. این resolver تشخیص می دهد که آیا درخواست دریافتی، یک درخواست multipart حاوی فایل های بارگذاری شده است، و اگر چنین باشد، Spring تمام HttpServletRequest را در یک MultipartHttpServletRequest قرار داده و آن را برای بازیابی داده ها ارسال شده به متد مورد نظر تحویل می دهد.

این رویکرد سازگار از طریق اینترفیس org.springframework.web.multipart.MultipartResolver تامین می شود که در هر دو بسته افزونه پیاده سازی شده است و همین طور می تواند برای کنترل کردن multipartها در هر تکنولوژی دیگری پیاده سازی شود.

پیکربندی Multipart Resolver

دو نوع murlipart resolver وجود دارند: یکی بر اساس بسته COS و دیگری بر اساس Commons FileUpload. هر دو resolver دارای خواصی هستند که شما می توانید آن ها را مطابق خواسته خود تغییر دهید. این خواص شامل اندازه فایلی که می تواند بارگذاری شود و محل ذخیره سازی موقت فایل است. اطلاعات بیشتر در مورد هر یک از پارامتر در JavaDoc Spring  موجود است. قطعه کد زیر نشان می دهد که چگونه هر یک از دو multipart resolver را پیکربندی کنیم:

 

 

نگران اتصال resolver به کنترلرها و سرولت توزیع کننده نباشید. Spring به طور خودکار آن را تشخیص داده و برای بررسی درخواست ها، بلافاصله استفاده از آن را شروع خواهد کرد.

ایجاد یک فرم برای بارگذاری یک فایل

فایل ها می توانند به کمک یک فرم بارگذاری شوند، اما در هنگام ساخت این فرم ها برخی از شرایط خاص را باید رعایت کرد. اول این که شما باید <“input type=”file> را به فرم بیافزایید. همچنین نیاز است تعیین کنید در فرمی که عنصر ورودی فایل را قرار داده اید، از چه کدینگی استفاده شود. به عنوان مثال:

 

هم اکنون تمام چیزی که کاربر برای بارگذاری فایل توسط یک مرورگر نیاز دارد، در فرم شما قرار گرفته است. البته هنوز شما به یک کنترلر نیاز دارید که داده های ارسال شده را مدیریت کند.

کنترل داده های بارگذاری شده

دو راه برای بازیابی داده هایی که توسط کاربران بارگذاری شده اند وجود دارد. همانطور که قبلا اشاره شد، Spring به طور خودکار HttpServletRequest را در یک MultipartHttpServletRequest قرار داده تا از این طریق بازیابی داده ها امکان پذیر شود. هر کنترلری که به HttpServletRequest دسترسی دارد، می تواند آن را به یک نمونه از دومی تغییر دهد:

 

در حالی که این روش بسیار ساده است، Spring یک راه زیباتری را برای بازیابی داده ها از بسته درخواست فراهم کرده است. این راه تقریبا نیاز به هیچ گونه کد نویسی خاص ندارد و در شی مدل دامنه، خصیصه ای از نوع، برای مثال، []byte دارد:

 

ما در صورت استفاده از یک ویرایشگر سفارشی، نیاز نداریم که درخواست را به MultipartHttpServletRequest تبدیل کنیم. در عوض، Spring عمل انقیاد را برای ما انجام می دهد (البته اگر کنترلر فرم به درستی پیکربندی شده باشد) و ما تنها باید شی دامنه خود را به درستی ذخیره کنیم. توجه کنید که یک ویرایشگر اضافی (StringMultipartFileEditor) برای تبدیل خودکار فایل به رشته و انقیاد آن به شی دامنه، در دسترس است. همچنین، شما می توانید از نوع MultipartFile در شی دامنه خود استفاده کنید، که این کار باعث ایجاد یک وابستگی غیر ضروری به کلاس MultipartFile می شود و توصیه نمی گردد.

 

 

توجه کنید که نام عنصر ورودی (file) در فرمی که قبلا توضیح داده شد، به نام خصیصه موجود در شی دامنه وابسته است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *