File Upload in Spring MVC
Many applications need file upload – profile pictures, documents, attachments. Spring MVC makes file uploading simple with MultipartFile.
Step 1: Configure Multipart support (if using Spring Boot, it's auto-configured). For XML config:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/> <!-- 10MB -->
</bean>
Step 2: Create a model to hold file data
public class FileUpload {
private String description;
private MultipartFile file; // This will hold the uploaded file
// getters and setters
}
Step 3: Create controller for file upload
@Controller
public class FileUploadController {
// Show upload form
@GetMapping("/upload")
public String showUploadForm(Model model) {
model.addAttribute("fileUpload", new FileUpload());
return "upload-form";
}
// Handle file upload
@PostMapping("/upload")
public String handleFileUpload(
@ModelAttribute FileUpload fileUpload,
BindingResult bindingResult,
RedirectAttributes redirectAttributes) {
MultipartFile file = fileUpload.getFile();
if (file.isEmpty()) {
bindingResult.rejectValue("file", "error.file", "File cannot be empty");
return "upload-form";
}
try {
// Save file to disk or database
String fileName = file.getOriginalFilename();
String uploadDir = "uploads/";
File dest = new File(uploadDir + fileName);
file.transferTo(dest);
redirectAttributes.addFlashAttribute("message", "File uploaded successfully: " + fileName);
} catch (IOException e) {
bindingResult.rejectValue("file", "error.file", "File upload failed");
return "upload-form";
}
return "redirect:/upload-success";
}
@GetMapping("/upload-success")
public String uploadSuccess() {
return "upload-success";
}
}
Step 4: Create the upload form (upload-form.jsp or .html)
<form action="/upload" method="post" enctype="multipart/form-data">
<label>Description:</label>
<input type="text" name="description"/><br/>
<label>Choose file:</label>
<input type="file" name="file"/><br/>
<button type="submit">Upload</button>
</form>
Important:
- Form must have
enctype="multipart/form-data"for file uploads. MultipartFileinterface represents the uploaded file.- Use
transferTo()to save the file to disk. - Always check if file is empty and handle exceptions.
Two Minute Drill
- Use MultipartFile to handle file uploads in Spring MVC.
- Form must have enctype="multipart/form-data".
- Configure multipartResolver for file upload support.
- transferTo() saves the file to disk.
- Validate file size and type before processing.
Need more clarification?
Drop us an email at career@quipoinfotech.com
