使用base64格式漂亮上传文件的后端接口代码
最好完成java 控制层的实现
需要的是批量上传文件的接口
这种代码百度不是一箩筐?
import com.jeewechat.wechat.entity.SftpFile;
import com.jeewechat.wechat.mapper.FileMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
@Api(value = "BatchFilesController", tags = {"文件(附件)信息表"})
@Log4j
@Controller
@RequestMapping("/batchFiles")
public class BatchFilesController {
@Autowired
private FileMapper fileMapper;
/**
* @param userId 用户ID
* @param files 文件对象
* @return java.lang.String
* @description TODO 批量文件上传
* @author WangTianLiang
* @date 2021/5/21
*/
@ApiOperation("批量文件上传")
@RequestMapping(value = "batchUploadFile", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> batchUploadFile(@RequestParam("files") MultipartFile[] files, @RequestParam("userId") String userId) {
Map<String, Object> mapData = new HashMap<>();
//step 1: 判断校验文件流是否有文件
if (files == null || files.length <= 0) {
mapData.put("success", false);//false:成功,false:失败
mapData.put("msg", "系统未检测到文件流");
return mapData;
}
//step 2: 创建List集合用于存储文件对象
List<SftpFile> sftpFileList = new ArrayList<>();
//step 3: 创建List集合用于存储文件ID,返给前端
List<String> sftpFileIdList = new ArrayList<>();
for (MultipartFile file : files) {
//step 4: 封装实例对象
SftpFile sftpFile = new SftpFile();
String fileId = SftpFile.createDbId();//随机生产主键ID
sftpFile.setFileId(fileId);//文件id
sftpFile.setUserId(userId);//操作用户id
sftpFile.setCreateTime(new Date());//创建时间
// 获取原始名字
String fileNameUp = file.getOriginalFilename();
sftpFile.setFileNameUp(fileNameUp);//上传文件名称
sftpFile.setFileName(fileId);//存储文件的名称
// 获取后缀名
String suffixType = fileNameUp.substring(fileNameUp.lastIndexOf(".") + 1);
sftpFile.setFileType(suffixType);//文件类型
//获得文件大小
Float size = Float.parseFloat(String.valueOf(file.getSize())) / 1024;
BigDecimal b = new BigDecimal(size);
size = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
sftpFile.setFileSize(size.toString());//文件大小(字节单位)
// 文件保存路径 你还可以在拼接一层路径,例如 20210521 每天上传的都会生成一个新的文件加里
String filePath = "E://image//";
sftpFile.setFilePath(filePath);//文件上传路径
// 文件重命名,防止重复
String filePathName = filePath + fileId + "." + sftpFile.getFileType();
//本机ip 静态方法获取InetAddress对象。
InetAddress ia = null;
try {
ia = ia.getLocalHost();// 获取本地主机
sftpFile.setServerIp(ia.getHostAddress());
} catch (UnknownHostException e) {
log.error("文件传输服务器失败:", e);
}
//step 5: 创建文件对象
File dest = new File(filePathName);
//step 6: 判断路径是否存在,如果不存在则创建
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
//step 7: 文件存在,返回
if (dest.exists()) {
mapData.put("success", false);//false:成功,false:失败
mapData.put("msg", "文件已存在,请重新上传" + fileNameUp);
return mapData;
}
try {
//step 8: 保存到服务器中
file.transferTo(dest);
//step 9: 将生产的文件ID 和文件对象分别存入对应的集合
sftpFileIdList.add(fileId);
sftpFileList.add(sftpFile);
} catch (Exception e) {
log.error("文件传输服务器失败:", e);
}
}
//判断校验存储文件对象集合是否为空、集合长度是否大于0
if (sftpFileList != null && sftpFileList.size() > 0) {
//step 10: 批量添加文件对象
int i = fileMapper.batchInsertFile(sftpFileList);
//step 11: 判断是否添加成功 存储文件对象的集合长度是否等于数据库执行的条数
if (sftpFileList.size() == i) {
mapData.put("success", true);//false:成功,false:失败
mapData.put("msg", "文件上传成功");
mapData.put("data", sftpFileIdList);
return mapData;
}
}
mapData.put("success", false);//false:成功,false:失败
mapData.put("msg", "文件上传失败");
return mapData;
}
}