腾讯云Cos分布式-多线程分片上传核心代码
原文地址:https://cloud.tencent.com/developer/article/2540765?from=15425&policyId=20240000&traceId=01k0rgzy5arnfbtvf098fmkzkq&frompage=seopage
好吧,我还是把我后面肯能用得到的,原文博主贴的核心代码转一下,后面看看怎么用.net实现一下。这里就全系转载了,参考原作者的思路,感谢。
// 分片上传核心逻辑 public class MultipartUploader { private static final int PART_SIZE = 5 * 1024 * 1024; // 5MB分片 public void upload(File file, String bucketName) { // 初始化分片上传 InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, file.getName()); InitiateMultipartUploadResult initResponse = ossClient.initiateMultipartUpload(initRequest); // 创建线程池 ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2); List<Future<PartETag>> futures = new ArrayList<>(); // 分片并提交任务 long fileLength = file.length(); int partCount = (int) (fileLength / PART_SIZE); if (fileLength % PART_SIZE != 0) partCount++; for (int i = 0; i < partCount; i++) { long startPos = i * PART_SIZE; long curPartSize = Math.min(PART_SIZE, fileLength - startPos); UploadPartTask task = new UploadPartTask(initResponse.getUploadId(), bucketName, file.getName(), file, startPos, curPartSize, i + 1); futures.add(executor.submit(task)); } // 等待所有分片完成 List<PartETag> partETags = new ArrayList<>(); for (Future<PartETag> future : futures) { partETags.add(future.get()); } // 合并分片 CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest( bucketName, file.getName(), initResponse.getUploadId(), partETags); ossClient.completeMultipartUpload(compRequest); } } // 分片上传任务 class UploadPartTask implements Callable<PartETag> { // 实现分片上传细节 @Override public PartETag call() throws Exception { // 读取文件分片 // 创建UploadPartRequest // 执行分片上传 // 返回PartETag } }
分片:
def calculate_part_size(file_size): # 根据文件大小动态调整分片 if file_size <= 50 * 1024 * 1024: # <50MB return 1 * 1024 * 1024 # 1MB分片 elif file_size <= 5 * 1024 * 1024 * 1024: # <5GB return 5 * 1024 * 1024 # 5MB分片 else: return 10 * 1024 * 1024 # 10MB分片
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号