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

苏州网站建设师长沙网站包年优化

苏州网站建设师,长沙网站包年优化,怎样添加网站图标,wordpress htaccess一、前言 各位亲爱的们,之前介绍过了上传超大文件到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.yidumall.com/news/47290.html

相关文章:

  • 一般建设一个网站多少钱一个网站的seo优化有哪些
  • 扬州专业做网站西安seo推广优化
  • 做网站需求文档seo的搜索排名影响因素有
  • 济南营销型网站建设贵吗西安seo服务
  • 做企业形象网站站外seo推广
  • 页面设计代码怎么写seo有哪些优缺点?
  • 封丘有做网站的吗自己建网站的详细步骤
  • 在线免费解答网站怎么建淘宝关键词优化
  • 浏览器怎么打开网站服务器下载杭州网站优化搜索
  • 比邻店网站开发英文谷歌优化
  • 网站建设企业资质网站推广计划书范文
  • 有什么好看的网站资源有免费做网站的吗
  • 新疆做网站图片搜索图片识别
  • 上海快速建站平台谷歌seo排名工具
  • 网络公司市值最新排名优化网站软文
  • 网站怎么做 流程图网络推广用什么软件好
  • 制作网页小程序seo关键词排名优化制作
  • dreamweaver动态网页制作seo优化培训多少钱
  • 织梦做社交网站合适吗搜索引擎优化案例
  • 昆山做网站的jofunsbt蚂蚁磁力
  • wordpress 国人原创关键词优化难度查询
  • 电脑网页打不开是什么原因网站优化团队
  • 昆明网站建设哪家比较好网络营销课程培训
  • 设计娱乐网站营销软文200字
  • 微信网站怎么做seo的培训课程
  • 凯里市建设局网站推广普通话宣传周
  • 迪庆北京网站建设百度网络营销中心官网
  • 东莞网站制作网站设计自动外链工具
  • 电子商务网站建设作业代码搜索引擎优化的方法
  • 网站建设组织西安竞价托管代运营