Java 文件分块上传服务器端源代码(三)
String strBlockIndex = createStrBlockIndex(info.getBlockIndex());
String suffixPath = preUpload.getUuid() + ".part" + strBlockIndex;
String tempFilePath = info.getTempFile();
File tempFile = new File(tempFilePath);
File tmpFile = new File(dirPath + suffixPath);
if (tmpFile.exists()) {
FileUtils.deleteQuietly(tmpFile);
}
FileUtils.moveFile(tempFile, tmpFile);
localBlockUrl[j]=dirPath + suffixPath;
j++;
info.setStatus(Global.MOVED_TO_NEWDIR);
getBaseDao().update("upload.updateBlockUpload", info);
if (log.isInfoEnabled())
log.info(preUpload.getUuid() + " " + info.getBuId() + " moveBlockFiles");
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new BaseException("file not found");
}
}
preUpload.setLocalBlockUrl(localBlockUrl);
preUpload.setDirPath(dirPath);
preUpload.setStatus(Global.MOVED_TO_NEWDIR);
getBaseDao().update("upload.updatePreUploadInfo", preUpload);
}
private String createStrBlockIndex(int blockIndex) {
String strBlockIndex;
if (blockIndex < 10) {
strBlockIndex = "000" + blockIndex;
} else if (10 <= blockIndex && blockIndex < 100) {
strBlockIndex = "00" + blockIndex;
} else if (100 <= blockIndex && blockIndex < 1000) {
strBlockIndex = "0" + blockIndex;
} else {
strBlockIndex = "" + blockIndex;
}
return strBlockIndex;
}
最后是文件的组装源代码:
[java]
/**
* 组装文件
*
*/
private void assembleFileWithBlock(BlockPreuploadFileInfo preUpload) {
String dirPath = preUpload.getDirPath();
// 开始在指定目录组装文件
String uploadedUrl = null;
String[] separatedFiles;
String[][] separatedFilesAndSize;
int fileNum = 0;
File file = new File(dirPath);
separatedFiles = file.list();
separatedFilesAndSize = new String[separatedFiles.length][2];
Arrays.sort(separatedFiles);
fileNum = separatedFiles.length;
for (int i = 0; i < fileNum; i++) {
separatedFilesAndSize[i][0] = separatedFiles[i];
String fileName = dirPath + separatedFiles[i];
File tmpFile = new File(fileName);
long fileSize = tmpFile.length();
separatedFilesAndSize[i][1] = String.valueOf(fileSize);
}
RandomAccessFile fileReader = null;
RandomAccessFile fileWrite = null;
long alreadyWrite = 0;
int len = 0;
byte[] buf = new byte[1024];
try {
uploadedUrl = Global.UPLOAD_ABSOLUTE_PAHT_ + Global.PATH_SEPARATIVE_SIGN + preUpload.getUid() + Global.PATH_SEPARATIVE_SIGN + preUpload.getUuid();
fileWrite = new RandomAccessFile(uploadedUrl, "rw");
for (int i = 0; i < fileNum; i++) {
fileWrite.seek(alreadyWrite);
// 读取
fileReader = new RandomAccessFile((dirPath + separatedFilesAndSize[i][0]), "r");
// 写入
while ((len = fileReader.read(buf)) != -1) {
fileWrite.write(buf, 0, len);
}
fileReader.close();
alreadyWrite += Long.parseLong(separatedFilesAndSize[i][1]);
}
fileWrite.close();
preUpload.setStatus(Global.ASSEMBLED);
preUpload.setServerPath(uploadedUrl);
getBa