分块上传
/**
* 分块文件
*/
@Test
public void sliceFile() {
File sourceFile = new File("/Users/liangzhiwei/Movies/pexels_videos_2759477 (2160p).mp4");
String chunkFilePath = "/Users/liangzhiwei/Downloads/chunk/";
long chunkSize = 1024 * 1024; // 每个分片的大小
int chunkNumber = (int) Math.ceil((double) sourceFile.length() / chunkSize); // 分片总数,向上取整
// 使用流从源文件读取数据,向分块文件写入数据
try (RandomAccessFile accessTmpFile = new RandomAccessFile(sourceFile, "r")) {
byte[] buffer = new byte[1024]; // 创建一个字节数组作为缓冲区
for (int i = 0; i < chunkNumber; i++) {
// 创建一个新的分块文件
File chunFile = new File(chunkFilePath + i);
try (RandomAccessFile accessTmpFileWrite = new RandomAccessFile(chunFile, "rw")) {
int len;
while ((len = accessTmpFile.read(buffer)) != -1) {
accessTmpFileWrite.write(buffer, 0, len);
// 如果分块文件大小达到了chunkSize,就开始写下一个分块文件
if (chunFile.length() >= chunkSize) {
break;
}
}
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
最后更新于
这有帮助吗?