本文来记录一个通用的文件上传接口
文章目录
测试程序
测试程序
/**
* 通用上传请求
*/
@PostMapping("/upload/file")
@ResponseBody
@ApiOperation(value = "上传文件")
public ResponseBean<?> uploadFile(MultipartFile[] files) {
//无文件返回错误
if (files == null || files.length == 0) {
return new ResponseBean<>(400, "无文件", -1);
}
//新文件名
StringBuilder newFileName;
//全部文件名,若多个,则逗号分隔
StringBuilder allFileNames = new StringBuilder();
//上传路径
String fileSavePath = RuoYiConfig.getUploadPath();
//若文件夹不存在,则创建文件夹
//test.txt不会创建,故给任意值占位即可
File parentFile = new File(fileSavePath + "test.txt").getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
//遍历所有文件
for (MultipartFile file : files) {
//得到原始文件名
newFileName = new StringBuilder(file.getOriginalFilename());
//查询文件名中点号所处位置
int i = newFileName.lastIndexOf(".");
//若点号位置大于0,则文件名正常
if (i > 0) {
//在点号前拼接UUID防止文件重名
newFileName.insert(i, "_" + UUID.randomUUID().toString().substring(0, 5));
} else {
//若点号位置小于等于0,则文件名不规范
return new ResponseBean<>(400, "文件'" + newFileName + "'名称不规范", -1);
}
try {
// 保存文件
file.transferTo(new File(fileSavePath + newFileName));
//若全部文件名为空,则此为第一个文件,直接追加此文件名
if (StringUtils.isBlank(allFileNames.toString())) {
allFileNames.append(newFileName);
} else {
//若全部文件名不为空,则追加逗号和文件名
allFileNames
.append(",")
.append(newFileName)
.toString();
}
} catch (IOException e) {
log.error("文件上传异常:\n" + e.getMessage());
return new ResponseBean<>(500, "上传失败", -1);
}
}
//返回全部文件名和文件路径
HashMap<String, String> fileInfo = new HashMap<String, String>(2) {{
put("fileNames", allFileNames.toString());
put("filePath", fileSavePath);
}};
//返回信息
return new ResponseBean<>(200, "上传成功", fileInfo);
}
ResponseBean<?>
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseBean<T> {
private Integer code;
private String msg;
private T data;
}
测试结果