当前位置: 首页 > 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.hkea.cn/news/890323/

相关文章:

  • 网站建设一年多少恰东莞网站到首页排名
  • 新企业网站应该怎么做SEO优化广告联盟有哪些
  • 手机app开发网站建设软文推广文章案例
  • 网站自然排名百度经验官网登录
  • dz网站模板沧州网站优化公司
  • 桂林论坛天涯社区培训行业seo整站优化
  • 做伊瑞尔竞技场的网站搜索引擎简称seo
  • 46云虚拟主机股票发行ipo和seo是什么意思
  • 新泰做网站菏泽seo
  • 网站建设排名东莞seo收费
  • 做网站前后端的发布流程自己如何制作网站
  • 网站营销与推广策略百度一下官网首页百度
  • 网站建设张世勇100个免费推广b站
  • 网络营销的常用工具百度关键词优化点击 教程
  • 公司网站要怎么做少儿编程培训机构排名前十
  • 一个好的网站是什么样的商家联盟营销方案
  • 网站解除域名绑定网站广告收费标准
  • 郑州的建设网站有哪些手续免费发布推广信息的平台有哪些
  • 手机做网站软件优化服务平台
  • 网站图片装修的热切图怎么做营销技巧培训
  • 可以上传图片的网站怎么做百度关键词点击
  • 泉州网站制作广州seo网站开发
  • cuntlove wordpressseo外链发布工具
  • 购买一个网站空间如何可以多个域名使用吗长沙网站建设服务
  • 天津市建设委员会网站上海网站制作开发
  • 扬中网站建设墨子学院seo
  • 分析电子商务网站建设需求教案青岛今天发生的重大新闻
  • 汕头模板开发建站百度发布信息怎么弄
  • 健身网站开发项目总结关键词筛选工具
  • 重庆网站建设零臻靠谱国内永久免费的云服务器