在Spring MVC中实现多文件上传,通常我们会使用`MultipartFile`接口来处理上传的文件。以下是一个简单的Spring MVC多文件上传的示例。
首先,你需要在你的Spring MVC项目中添加必要的依赖,比如`spring-webmvc`和`commons-fileupload`(如果你使用的是Servlet 3.0及以上版本,并且容器支持,那么`commons-fileupload`可能不是必需的,因为Servlet 3.0提供了原生的文件上传支持)。但是,为了简单起见,这里不展示Maven或Gradle依赖配置。
接下来是Controller层的实现:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
@Controller
@RequestMapping("/upload")
public class FileUploadController {
// 文件存储路径,根据实际情况修改
private static final String UPLOADED_FOLDER = "/path/to/uploaded/files/";
@PostMapping("/multi")
public String handleMultiFileUpload(@RequestParam("files") List<MultipartFile> files, RedirectAttributes redirectAttributes) {
if (files.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "No files were selected for upload.");
return "redirect:uploadStatus";
}
List<String> fileNames = new ArrayList<>();
for (MultipartFile file : files) {
try {
// 检查文件是否为空
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
fileNames.add(file.getOriginalFilename());
} else {
redirectAttributes.addFlashAttribute("message", "Failed to upload empty file.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
redirectAttributes.addFlashAttribute("message", "You successfully uploaded " + fileNames.size() + " files!");
redirectAttributes.addFlashAttribute("fileNames", fileNames);
return "redirect:/uploadStatus";
}
}
注意:
1. `@RequestParam("files") List
2. 文件存储路径`UPLOADED_FOLDER`需要根据你的服务器配置进行修改。
3. 示例中使用了`RedirectAttributes`来在重定向后传递消息和文件名列表。你需要有一个对应的视图(比如`/uploadStatus`)来显示这些信息。
最后,请确保你的Spring MVC配置支持文件上传(通常是通过配置`