当前位置: 首页 > news >正文

生产做网站表带的制造厂家网络设计与实施课程设计

生产做网站表带的制造厂家,网络设计与实施课程设计,如何注册公司支付宝,南宁建站服务公司之一、前言 各位亲爱的们,之前介绍过了上传超大文件到MinIO: MinIO分片上传超大文件(纯服务端)MinIO分片上传超大文件(非纯服务端) 这里最后再补充一下从MinIO下载超大文件。 二、从MinIO分片下载大文件 …

一、前言

各位亲爱的们,之前介绍过了上传超大文件到MinIO:

  • MinIO分片上传超大文件(纯服务端)
  • MinIO分片上传超大文件(非纯服务端)

这里最后再补充一下从MinIO下载超大文件。

二、从MinIO分片下载大文件

2.1、确定文件大小

根据文件名查找MinIO上对应文件的大小。

核心API:minioClient.statObject(StatObjectArgs args)

StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
long totalLength = statObjectResponse.size();
System.out.println("目标文件总大小: " + totalLength);

2.2、分片下载

这里举例分片大小为1000个字节,根据文件总大小计算出分片数,最后将每个分片保存下来。

核心API:minioClient.getObject(GetObjectArgs args)

final long CHUNK_LENGTH = 1000;
// 从目标文件开始下载
long startByte = 0l;
long chunkCount = (long) Math.ceil((double) totalLength / CHUNK_LENGTH);
System.out.println("预计总分片数: " + chunkCount);
String targetPath = "C://tmp";
for (long i = 0; i < chunkCount; i++) {GetObjectResponse response = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).offset(startByte).length(CHUNK_LENGTH).build());String chunkFilePath = targetPath + "//" + (i + 1) + ".part";FileOutputStream fileOutputStream = new FileOutputStream(chunkFilePath);byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = response.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, bytesRead);}System.out.println("分片已下载: " + chunkFilePath + " 大小: " + new File(chunkFilePath).length());startByte = (i + 1) * CHUNK_LENGTH;
}

2.3、合并分片

将每个分片文件合并到一个文件里。

String mergedFilePath = targetPath + "//" + "result.txt";
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(mergedFilePath));
for (long i = 0; i < chunkCount; i++) {String chunkFilePath = targetPath + "//" + (i + 1) + ".part";BufferedInputStream bis = new BufferedInputStream(new FileInputStream(chunkFilePath));byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = bis.read(buffer)) != -1) {bos.write(buffer, 0, bytesRead);}bis.close();
}
bos.close();

三、完整测试代码

import io.minio.*;
import java.io.*;public class MinioMain4Download {static CustomMinioClient minioClient = new CustomMinioClient(MinioClient.builder().endpoint("http://192.168.2.195:9000").credentials("minioUser", "minioUser123").build());// 测试桶static String bucketName = "test";static {try {boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (!found) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}} catch (Exception e) {throw new RuntimeException(e);}}public static void main(String[] args) throws Exception {// 大小 1295 ByteString fileName = "202410181656357348160";// 第一步:查询目标文件大小StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());long totalLength = statObjectResponse.size();System.out.println("目标文件总大小: " + totalLength);// 第二步:分片下载(最简单的同步方式)// 假设1000个字节作为一个分片final long CHUNK_LENGTH = 1000;// 从目标文件开始下载long startByte = 0l;long chunkCount = (long) Math.ceil((double) totalLength / CHUNK_LENGTH);System.out.println("预计总分片数: " + chunkCount);String targetPath = "C://tmp";for (long i = 0; i < chunkCount; i++) {GetObjectResponse response = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).offset(startByte).length(CHUNK_LENGTH).build());String chunkFilePath = targetPath + "//" + (i + 1) + ".part";FileOutputStream fileOutputStream = new FileOutputStream(chunkFilePath);byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = response.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, bytesRead);}System.out.println("分片已下载: " + chunkFilePath + " 大小: " + new File(chunkFilePath).length());startByte = (i + 1) * CHUNK_LENGTH;}// 第三步:合并String mergedFilePath = targetPath + "//" + "result.txt";BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(mergedFilePath));for (long i = 0; i < chunkCount; i++) {String chunkFilePath = targetPath + "//" + (i + 1) + ".part";BufferedInputStream bis = new BufferedInputStream(new FileInputStream(chunkFilePath));byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = bis.read(buffer)) != -1) {bos.write(buffer, 0, bytesRead);}bis.close();}bos.close();System.out.println("合并完成");}
}
http://www.yayakq.cn/news/118479/

相关文章:

  • 高端网站建设模板全网营销案例
  • 大连六兄弟网站建设网站开发怎么根据设计稿的尺寸算图片高度
  • 做网站费用怎么记分录做网站 聊城
  • 水果行业为什么做网站怎么做 niche网站
  • 搭建企业网站的步骤百度搜索关键词推广
  • 厦门专业网站推广建站信誉好的常州做网站
  • 用word做网站功能结构图七米网站开发
  • 小企业做网站有用吗中山做网站推广公司
  • 成立网站的意义制作网页用什么布局
  • 小企业网站建设方案搭建网站都需要什么
  • 福州网站建设网络公司排名wordpress4.4.1下载
  • 网站做桌面应用 iOS建立网站的教学书籍
  • 企业如何找网络公司做网站公司网站建设方案详细
  • 百度小程序跟做网站网页制作特效代码大全
  • 毕业设计做网站答辩会问什么如何制作假网页
  • dedecms 百度网站地图saas建站
  • 大伙房水库输水工程建设局网站本地wordpress打开慢
  • 网站域名所有权查询wordpress 代码生成
  • 酒类网站建设wordpress默认登录页修改
  • 怎么做娱乐电玩网站吉林省建筑信息管理平台
  • 学院网站信息化建设总结网站信息发布
  • vr网站开发wordpress换行符
  • 网页游戏网站排名全球装修公司前十强
  • 深圳网站维护一般多少钱外发加工网站源码下载
  • 制作企业网站步骤企业邮箱号怎么注册
  • 荆州网站建设荆州国外的跨境电商平台有哪些
  • dede 电商网站模板下载网站如何兼容大多浏览器
  • 宜昌营销型网站建设直接访问网页
  • 在百度怎么建立自己的网站吗莘县做网站推广
  • 网站的基本建设佛山网站建设 奇锐科技