package com.gx.obe.server.management.fileload.controller; import com.gx.obe.server.common.vo.Result; import com.gx.obe.server.management.fileload.entity.FileChunk; import com.gx.obe.server.management.fileload.entity.ParameterInfo; import com.gx.obe.server.management.fileload.utill.FileMd5Util; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Objects; import static com.gx.obe.server.management.fileload.utill.FileUtils.generatePath; import static com.gx.obe.server.management.fileload.utill.FileUtils.merge; @Slf4j @RestController @RequestMapping("/softwareUpload") public class SoftwareUploadController { @Value("${upload.softwareFolder}") private String softwareFolder; @PostMapping("/chunk") public Result uploadChunk(FileChunk chunk) { MultipartFile file = chunk.getFile(); try { byte[] bytes = file.getBytes(); Path path = Paths.get(generatePath(softwareFolder, chunk)); //文件写入指定路径 Files.write(path, bytes); Result result = new Result<>(); result.setCode(Result.SUCCESS); result.setData("success"); result.setMsg("上传成功"); return result; } catch (Exception e) { e.printStackTrace(); return getStringResult(e); } } private static Result getStringResult(Exception e) { log.error(e.getMessage()); Result result = new Result<>(); result.setCode(Result.FAIL); result.setData("fail"); result.setMsg("上传异常"); return result; } @PostMapping("/checkFile") public boolean checkChunk(String fileUrl) { return new File(Paths.get(fileUrl).toString()).exists(); } @PostMapping("/checkFileMD5") public boolean checkChunkMD5(String fileName, String fileMD5) { File file = new File(Paths.get(softwareFolder + "/" + fileName).toString()); if (file.exists()) { return MD5check(file, fileMD5); } return false; } @PostMapping("/chunk/mergeFile") public Result mergeFile(ParameterInfo fileInfo) { String filename = fileInfo.getFilename(); StringBuilder sb = new StringBuilder(); sb.append(softwareFolder).append("/"); String file = sb.toString() + "/" + filename; String folder = sb.toString(); try { merge(file, folder, filename); } catch (IOException e) { return getStringResult(e); } Result result = new Result<>(); result.setCode(Result.SUCCESS); result.setData("success"); result.setMsg("上传成功!"); if (!MD5check(new File(file), fileInfo.getFileMD5())) { result.setMsg("上传成功,文件MD5校验失败!"); } return result; } private boolean MD5check(File file, String fileMD5) { return Objects.equals(FileMd5Util.getFileMD5(file), fileMD5); } }