文件上傳是 Web 開發高頻需求。本文提供基於 Spring MVC 的多文件上傳完整實現,涵蓋控制器處理、文件重命名、路徑管理、數據庫記錄等核心邏輯。
public ResponseItem uploadFile(MultipartHttpServletRequest request,
FileItem fileItem, PageData pd) {
ResponseItem responseItem = new ResponseItem();
try {
boolean isSuccess = false;
MultiValueMap<String, MultipartFile> multiMap = request.getMultiFileMap();
String relativePath = CreateDateDirUtil.create(Const.UPLOADPATH + "/upload");
Set<String> keys = multiMap.keySet();
isSuccess = true;
if (isSuccess) {
FileItem uploadfile = new FileItem();
for (String key : keys) {
List<MultipartFile> mutiFiles = multiMap.get(key);
for (MultipartFile file : mutiFiles) {
String uuid = UuidUtil.get32UUID();
String suffix = file.getOriginalFilename()
.substring(file.getOriginalFilename().indexOf("."));
uploadfile.setProc(fileItem.getProc());
uploadfile.setFileTempname(uuid + suffix);
uploadfile.setNames(fileItem.getNames());
uploadfile.setUserid(fileItem.getUserid());
String fileName = URLDecoder.decode(file.getOriginalFilename());
uploadfile.setFilename(fileName);
uploadfile.setFilepath("upload/" + relativePath);
String type = fileItem.getType();
if ("blfj".equals(type)) fileItem.setType("辦理附件");
else if ("jxfj".equals(type)) fileItem.setType("結項附件");
else if ("xcfj".equals(type)) fileItem.setType("巡查附件");
uploadfile.setType("辦理附件");
uploadfile.setTime(new Date());
file.transferTo(new File(Const.UPLOADPATH + "/upload/" + relativePath,
uuid + suffix));
isSuccess = workflowDao.insertWorkflowUploadFile(uploadfile);
}
}
if (isSuccess) {
return responseItem.getSuccessInfo(isSuccess);
} else {
return responseItem.getFailureInfo("false");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return responseItem;
}
CreateDateDirUtil 按日期創建子目錄,避免單目錄文件過多<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple />
<input type="hidden" name="type" value="blfj" />
<input type="hidden" name="proc" value="${procId}" />
<button type="submit">上傳</button>
</form>