分块上传

/**
 * 分块文件
 */
@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);
    }
}

最后更新于

这有帮助吗?