@RequestMapping(value = "fileUploadBig.action", method = RequestMethod.POST)
@ResponseBody
public Msg fileUploadBig(@RequestParam("file") MultipartFile files, @RequestParam("compelete") String compelete, @RequestParam("chunks") String chunks) {
try {
System.out.println("调用远程服务器");
Msg msg = new Msg();
String fileName = files.getOriginalFilename();
File ttt = new File("D:\\fileserver\\" + fileName);
files.transferTo(ttt);
if (compelete.equals("true")) {
msg = merageFile(fileName, Integer.parseInt(chunks));
}
return msg;
} catch (IOException e) {
throw new SysRuntimeException(ResponseMessage.UPLOAD_FILE_FAIL);
}
}
//服务端进行数据合并
public Msg merageFile(String cutFileName, int chunks) throws IOException {
String saveAddr = "D:\\fileserver\\";
int indexOf = cutFileName.indexOf("-");
String timeStream = cutFileName.substring(0, indexOf);
//段数+文件名+后缀名
String substring = cutFileName.substring(indexOf + 1, cutFileName.length());
int indexOf1 = substring.indexOf("-");
//文件名+后缀名
String fileName = substring.substring(indexOf1 + 1, substring.length());
File file = new File(saveAddr + fileName);
if (file.exists()) {
file.delete();
System.out.println("覆盖已经存在的文件");
}
BufferedOutputStream destOutputStream = new BufferedOutputStream(new FileOutputStream(saveAddr + fileName));
for (int i = 1; i <= chunks; i++) {
//循环将每个分片的数据写入目标文件
byte[] fileBuffer = new byte[1024];//文件读写缓存
int readBytesLength = 0; //每次读取字节数
File sourceFile = new File(saveAddr + timeStream + "-" + i + "-" + fileName);
BufferedInputStream sourceInputStream = new BufferedInputStream(new FileInputStream(sourceFile));
System.out.println("开始合并分段文件:" + timeStream + "-" + i + "-" + fileName);
while ((readBytesLength = sourceInputStream.read(fileBuffer)) != -1) {
destOutputStream.write(fileBuffer, 0, readBytesLength);
}
sourceInputStream.close();
System.out.println("合并分段文件完成:" + timeStream + "-" + i + "-" + fileName);
//分片合并后删除
boolean delete = sourceFile.delete();
if (delete) {
System.out.println(timeStream + "-" + i + "-" + fileName + "删除完成");
}
}
destOutputStream.flush();
destOutputStream.close();
FileProtocolIfc write = FileProtocolFactory.getFilePackagerPortocol(FileConstant.protocol_local);
FileInfo fileInfo = new FileInfo();
fileInfo.setIs(new FileInputStream(file));
fileInfo.setSecurityLevel(null);
fileInfo.setName(fileName);
fileInfo.setMd5(null);
write.setObjFileInfo(fileInfo);
Msg msg = write.writeFile();
msg.setSecurityLevel(null);
System.out.println("文件上了后的id" + msg.getFileId());
return msg;
}
评论0