MultipartResolver হল Spring MVC তে ফাইল আপলোড করার জন্য ব্যবহৃত একটি ইন্টারফেস। এটি HTTP রিকোয়েস্টে পাঠানো মাল্টিপার্ট ডেটা (যেমন ফাইল) প্রসেস করে এবং ফাইল ডেটার সাথে অন্যান্য তথ্যও গ্রহণ করে। Spring MVC-তে MultipartResolver কনফিগার করা হয় যাতে ফাইল আপলোড এবং সেগুলিকে প্রসেস করা যায়।
MultipartResolver এর ভূমিকা:
- File Upload: ফাইলগুলোকে HTTP রিকোয়েস্টের অংশ হিসেবে সার্ভারে পাঠানো হয়।
- Parsing Multipart Requests: ফর্মের মাধ্যমে পাঠানো ফাইল ডেটাকে পার্স (পড়ার) করতে ব্যবহৃত হয়।
- Accessing File Data: ফাইলের নাম, সাইজ, কন্টেন্ট টাইপ ইত্যাদি তথ্য অ্যাক্সেস করতে ব্যবহৃত হয়।
Spring MVC তে ফাইল আপলোড করতে MultipartResolver কনফিগার করা আবশ্যক। Spring-এর CommonsMultipartResolver বা StandardServletMultipartResolver ক্লাসগুলো সাধারণত এই কাজের জন্য ব্যবহৃত হয়।
ধাপ ১: Maven ডিপেনডেন্সি
Spring MVC প্রজেক্টে ফাইল আপলোডের জন্য Commons FileUpload লাইব্রেরি দরকার হয়। Maven-এ প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<!-- Spring Web MVC Dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Commons FileUpload Dependency for file uploads -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- Spring Boot Starter Test for Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
ধাপ ২: MultipartResolver কনফিগার করা
Spring MVC তে ফাইল আপলোড করার জন্য, MultipartResolver কনফিগার করতে হবে। এটি Spring Bean হিসেবে কনফিগার করা হয়, এবং সাধারণত CommonsMultipartResolver বা StandardServletMultipartResolver ব্যবহৃত হয়।
1. CommonsMultipartResolver কনফিগারেশন
Spring MVC তে CommonsMultipartResolver ব্যবহার করার জন্য application.properties অথবা Spring Configuration ক্লাসে কনফিগারেশন যোগ করতে হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Configuration
public class FileUploadConfig {
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize(5000000); // Maximum file size (5MB)
resolver.setMaxInMemorySize(100000); // Maximum memory size (100KB)
return resolver;
}
}
এখানে:
setMaxUploadSize: ফাইল আপলোডের সর্বোচ্চ আকার নির্ধারণ করে।setMaxInMemorySize: ইন-মেমরি সর্বোচ্চ সাইজ নির্ধারণ করে।
2. StandardServletMultipartResolver কনফিগারেশন
Spring 4 থেকে StandardServletMultipartResolver ব্যবহার করা শুরু হয়েছে। এটি Servlet 3.0+ এর মাধ্যমে ফাইল আপলোডের সুবিধা প্রদান করে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
@Configuration
public class FileUploadConfig {
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
}
ধাপ ৩: Controller তৈরি করা
ফাইল আপলোড করার জন্য একটি Controller তৈরি করুন যা ফাইল ইনপুট এবং প্রসেসিং করবে।
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.ui.Model;
@Controller
public class FileUploadController {
@GetMapping("/upload")
public String showUploadForm() {
return "uploadForm";
}
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file, Model model) {
if (!file.isEmpty()) {
try {
// Get the file details
String fileName = file.getOriginalFilename();
long fileSize = file.getSize();
String contentType = file.getContentType();
// Perform file processing here (e.g., saving to the server)
// Example: file.transferTo(new File("some_directory/" + fileName));
// Add file details to the model to display in the view
model.addAttribute("fileName", fileName);
model.addAttribute("fileSize", fileSize);
model.addAttribute("contentType", contentType);
return "uploadSuccess"; // Return the success page
} catch (Exception e) {
model.addAttribute("error", "File upload failed: " + e.getMessage());
return "uploadForm";
}
} else {
model.addAttribute("error", "Please select a file to upload.");
return "uploadForm";
}
}
}
এখানে:
@RequestParam("file"): ফর্মের থেকে ফাইল ইনপুট প্যারামিটার গ্রহণ করে।file.getOriginalFilename(): আপলোড করা ফাইলের আসল নাম বের করা।file.getSize(): ফাইলের সাইজ বের করা।file.getContentType(): ফাইলের কন্টেন্ট টাইপ বের করা।
ধাপ ৪: HTML ফর্ম তৈরি করা
ফাইল আপলোড করার জন্য একটি HTML ফর্ম তৈরি করুন। ফর্মটি POST মেথড ব্যবহার করবে এবং মাল্টিপার্ট ডেটা সাবমিট করবে।
uploadForm.html
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h2>Upload a File</h2>
<form action="/upload" method="POST" enctype="multipart/form-data">
<label for="file">Choose file to upload:</label>
<input type="file" id="file" name="file" required>
<br><br>
<button type="submit">Upload</button>
</form>
<!-- Display any errors -->
<p th:if="${error}" th:text="${error}" style="color: red;"></p>
</body>
</html>
এখানে:
enctype="multipart/form-data": ফর্মের মাধ্যমে ফাইল পাঠানোর জন্য প্রয়োজনীয় অ্যাট্রিবিউট।<input type="file">: ফাইল নির্বাচন করার ইনপুট ফিল্ড।
ধাপ ৫: Success Page তৈরি করা
ফাইল আপলোড সফল হলে একটি সাফল্য পৃষ্ঠা প্রদর্শিত হবে।
uploadSuccess.html
<!DOCTYPE html>
<html>
<head>
<title>Upload Success</title>
</head>
<body>
<h2>File Upload Successful!</h2>
<p>File Name: <span th:text="${fileName}"></span></p>
<p>File Size: <span th:text="${fileSize}"></span> bytes</p>
<p>Content Type: <span th:text="${contentType}"></span></p>
</body>
</html>
ধাপ ৬: প্রজেক্ট রান করা
Spring Boot অ্যাপ্লিকেশন রান করার জন্য নিচের কমান্ড ব্যবহার করুন:
mvn spring-boot:run
এটি আপনার অ্যাপ্লিকেশন চালু করবে এবং আপনি ব্রাউজারে http://localhost:8080/upload URL এ গিয়ে ফাইল আপলোড ফর্ম দেখতে পাবেন।
উপসংহার
Spring MVC তে MultipartResolver ব্যবহার করে ফাইল আপলোড করা খুবই সহজ এবং কার্যকর। আপনি কাস্টম কনফিগারেশনসহ ফাইল আপলোড প্রসেসিং করতে পারেন এবং ফাইলের তথ্য (যেমন নাম, সাইজ, কন্টেন্ট টাইপ) প্রাপ্ত করতে পারেন। Spring MVC ফাইল আপলোডের জন্য CommonsMultipartResolver বা StandardServletMultipartResolver ব্যবহার করতে পারে এবং HTML ফর্মের মাধ্যমে ডেটা এবং ফাইল পাঠানো এবং প্রসেস করা যায়।
Read more