public static void AsynUploadParts(COSXML.CosXml cosXml, string bucket, string key, string uploadId, int partNumber, string srcPath) { UploadPartRequest request = new UploadPartRequest(bucket, key, partNumber, uploadId, srcPath); //设置签名有效时长 request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); request.SetCosProgressCallback(delegate(long completed, long total) { Console.WriteLine(String.Format("progress = {0} / {1} : {2:##.##}%", completed, total, completed * 100.0 / total)); }); //执行请求 cosXml.UploadPart(request, delegate(CosResult result) { UploadPartResult getObjectResult = result as UploadPartResult; Console.WriteLine(getObjectResult.GetResultInfo()); QLog.D("XIAO", result.GetResultInfo()); }, delegate(CosClientException clientEx, CosServerException serverEx) { if (clientEx != null) { QLog.D("XIAO", clientEx.Message); Console.WriteLine("CosClientException: " + clientEx.StackTrace); } if (serverEx != null) { QLog.D("XIAO", serverEx.Message); Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } }); }
public static void UploadParts(COSXML.CosXml cosXml, string bucket, string key, string uploadId, int partNumber, string srcPath) { try { UploadPartRequest request = new UploadPartRequest(bucket, key, partNumber, uploadId, srcPath); //设置签名有效时长 request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600); //设置进度回调 request.SetCosProgressCallback(delegate(long completed, long total) { Console.WriteLine(String.Format("{0} progress = {1} / {2} : {3:##.##}%", DateTime.Now.ToString(), completed, total, completed * 100.0 / total)); }); //执行请求 UploadPartResult result = cosXml.UploadPart(request); Console.WriteLine(result.GetResultInfo()); QLog.D("XIAO", result.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { QLog.D("XIAO", clientEx.Message); Console.WriteLine("CosClientException: " + clientEx.StackTrace); } catch (COSXML.CosException.CosServerException serverEx) { QLog.D("XIAO", serverEx.Message); Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } }
/// 上传一个分片 private void UploadPart(int partNumber, long partSize, string srcPath) { try { UploadPartRequest request = new UploadPartRequest(bucket, key, partNumber, this.uploadId, srcPath, partSize * (partNumber - 1), partSize); //执行请求 UploadPartResult result = cosXml.UploadPart(request); //请求成功 //获取返回分块的eTag,用于后续CompleteMultiUploads partNumberAndETags.Add(partNumber, result.eTag); //Console.WriteLine(result.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 Console.WriteLine("CosClientException: " + clientEx); InfoLog.InfoPrintf($"Cos: CosClientException: {clientEx}", InfoLog.InfoClass.系统错误信息); } }
public void mutiPartUpload(OssClient ossClient_0, string string_0, string string_1, string string_2, int int_0) { InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(string_2, string_1); InitiateMultipartUploadResult initiateMultipartUploadResult = ossClient_0.InitiateMultipartUpload(initiateMultipartUploadRequest); int num = 1024 * int_0; FileInfo fileInfo = new FileInfo(string_0); int num2 = (int)(fileInfo.Length / (long)num); if (fileInfo.Length % (long)num != 0L) { num2++; } List <PartETag> list = new List <PartETag>(); for (int i = 0; i < num2; i++) { FileStream fileStream = new FileStream(fileInfo.FullName, FileMode.Open); long num3 = (long)(num * i); fileStream.Position = num3; long value = ((long)num < fileInfo.Length - num3) ? ((long)num) : (fileInfo.Length - num3); UploadPartResult uploadPartResult = ossClient_0.UploadPart(new UploadPartRequest(string_2, string_1, initiateMultipartUploadResult.UploadId) { InputStream = fileStream, PartSize = new long?(value), PartNumber = new int?(i + 1) }); list.Add(uploadPartResult.PartETag); fileStream.Close(); } CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(string_2, string_1, initiateMultipartUploadResult.UploadId); foreach (PartETag item in list) { completeMultipartUploadRequest.PartETags.Add(item); } ossClient_0.CompleteMultipartUpload(completeMultipartUploadRequest); }
/// 上传一个分片 public void UploadPart() { //.cssg-snippet-body-start:[upload-part] try { string bucket = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID string key = "exampleobject"; //对象键 string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId int partNumber = 1; //分块编号,必须从1开始递增 string srcPath = @"temp-source-file"; //本地文件绝对路径 UploadPartRequest request = new UploadPartRequest(bucket, key, partNumber, uploadId, srcPath); //设置进度回调 request.SetCosProgressCallback(delegate(long completed, long total) { Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total)); }); //执行请求 UploadPartResult result = cosXml.UploadPart(request); //请求成功 //获取返回分块的eTag,用于后续CompleteMultiUploads this.eTag = result.eTag; Console.WriteLine(result.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { //请求失败 Console.WriteLine("CosClientException: " + clientEx); } catch (COSXML.CosException.CosServerException serverEx) { //请求失败 Console.WriteLine("CosServerException: " + serverEx.GetInfo()); } //.cssg-snippet-body-end }
private void UploadPart() { activieTasks = 0; int size = sliceList.Count; sliceCount = size; uploadPartRequestMap = new Dictionary <UploadPartRequest, long>(size); uploadPartRequestList = new List <UploadPartRequest>(size); AutoResetEvent resetEvent = new AutoResetEvent(false); for (int i = 0; i < size; i++) { if (activieTasks > MaxConcurrent) { resetEvent.WaitOne(); } lock (syncExit) { if (isExit) { return; } } SliceStruct sliceStruct = sliceList[i]; if (!sliceStruct.isAlreadyUpload) { UploadPartRequest uploadPartRequest = new UploadPartRequest(bucket, key, sliceStruct.partNumber, uploadId, srcPath, sliceStruct.sliceStart, sliceStruct.sliceLength); if (customHeaders != null && customHeaders.ContainsKey(CosRequestHeaderKey.X_COS_TRAFFIC_LIMIT)) { string trafficLimit = customHeaders[CosRequestHeaderKey.X_COS_TRAFFIC_LIMIT]; uploadPartRequest.LimitTraffic(Convert.ToInt64(trafficLimit)); } //打印进度 uploadPartRequest.SetCosProgressCallback( delegate(long completed, long total) { lock (syncProgress) { long dataLen = hasReceiveDataLength + completed - uploadPartRequestMap[uploadPartRequest]; UpdateProgress(dataLen, sendContentLength, false); hasReceiveDataLength = dataLen; uploadPartRequestMap[uploadPartRequest] = completed; } } ); uploadPartRequestMap.Add(uploadPartRequest, 0); uploadPartRequestList.Add(uploadPartRequest); Interlocked.Increment(ref activieTasks); cosXmlServer.UploadPart(uploadPartRequest, delegate(CosResult result) { Interlocked.Decrement(ref activieTasks); UploadPartResult uploadPartResult = result as UploadPartResult; sliceStruct.eTag = uploadPartResult.eTag; lock (syncPartCopyCount) { sliceCount--; if (sliceCount == 0) { OnPart(); } } resetEvent.Set(); }, delegate(CosClientException clientEx, CosServerException serverEx) { Interlocked.Decrement(ref activieTasks); if (UpdateTaskState(TaskState.Failed)) { OnFailed(clientEx, serverEx); } resetEvent.Set(); }); } else { lock (syncPartCopyCount) { sliceCount--; if (sliceCount == 0) { OnPart(); return; } } } } }
public void MutiPartUpload(string fileName, string key) { Console.WriteLine("开始上传:" + key); InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(ossConfig.BucketName, key); InitiateMultipartUploadResult initResult = ossClient.InitiateMultipartUpload(initRequest); // 设置每块为 5M int partSize = 1024 * 1024 * 5; FileInfo partFile = new FileInfo(fileName); // 计算分块数目 int partCount = (int)(partFile.Length / partSize); if (partFile.Length % partSize != 0) { partCount++; } Console.WriteLine("数据分块上传,一共:{0}块", partCount); // 新建一个List保存每个分块上传后的ETag和PartNumber List <PartETag> partETags = new List <PartETag>(); for (int i = 0; i < partCount; i++) { // 获取文件流 FileStream fis = new FileStream(partFile.FullName, FileMode.Open); // 跳到每个分块的开头 long skipBytes = partSize * i; fis.Position = skipBytes; //fis.skip(skipBytes); // 计算每个分块的大小 long size = partSize < partFile.Length - skipBytes ? partSize : partFile.Length - skipBytes; // 创建UploadPartRequest,上传分块 UploadPartRequest uploadPartRequest = new UploadPartRequest(ossConfig.BucketName, key, initResult.UploadId); uploadPartRequest.InputStream = fis; uploadPartRequest.PartSize = size; uploadPartRequest.PartNumber = (i + 1); UploadPartResult uploadPartResult = ossClient.UploadPart(uploadPartRequest); // 将返回的PartETag保存到List中。 partETags.Add(uploadPartResult.PartETag); // 关闭文件 fis.Close(); Console.WriteLine("第{0}块,上传完毕", i + 1); } CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(ossConfig.BucketName, key, initResult.UploadId); foreach (PartETag partETag in partETags) { completeReq.PartETags.Add(partETag); } // 红色标注的是与JAVA的SDK有区别的地方 //完成分块上传 Console.WriteLine("合并数据块开始"); CompleteMultipartUploadResult completeResult = ossClient.CompleteMultipartUpload(completeReq); Console.WriteLine("合并数据块结束"); // 返回最终文件的MD5,用于用户进行校验 Console.WriteLine(key + " 上传成功."); }
public void mutiPartUpload() { for (; ;) { getListItemName(); if (string.IsNullOrEmpty(path)) { break; } key = Guid.NewGuid().ToString() + path.Substring(path.LastIndexOf('.')); OssClient ossClient = new OssClient(endPoint, accessKeyID, accessKeySecret); InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, key); InitiateMultipartUploadResult initResult = ossClient.InitiateMultipartUpload(initRequest); // 设置每块为 5M ,不允许小于5M int partSize = 1024 * 100; FileInfo partFile = new FileInfo(path); // 计算分块数目 int partCount = (int)(partFile.Length / partSize); if (partFile.Length % partSize != 0) { partCount++; } // 新建一个List保存每个分块上传后的ETag和PartNumber List <PartETag> partETags = new List <PartETag>(); for (int i = 0; i < partCount; i++) { Bar.Value = (i * 100) / partCount; UploadInfo(Bar.Value.ToString()); // 获取文件流 FileStream fis = new FileStream(partFile.FullName, FileMode.Open); // 跳到每个分块的开头 long skipBytes = partSize * i; fis.Position = skipBytes; //fis.skip(skipBytes); // 计算每个分块的大小 long size = partSize < partFile.Length - skipBytes ? partSize : partFile.Length - skipBytes; // 创建UploadPartRequest,上传分块 UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, key, initResult.UploadId); uploadPartRequest.InputStream = fis; uploadPartRequest.PartSize = size; uploadPartRequest.PartNumber = (i + 1); UploadPartResult uploadPartResult = ossClient.UploadPart(uploadPartRequest); // 将返回的PartETag保存到List中。 partETags.Add(uploadPartResult.PartETag); // 关闭文件 fis.Close(); manualReset.WaitOne();//如果ManualResetEvent的初始化为终止状态(true),那么该方法将一直工作,直到收到Reset信号。然后,直到收到Set信号,就继续工作。 } CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(bucketName, key, initResult.UploadId); foreach (PartETag partETag in partETags) { completeReq.PartETags.Add(partETag); } // 红色标注的是与JAVA的SDK有区别的地方 //完成分块上传 CompleteMultipartUploadResult completeResult = ossClient.CompleteMultipartUpload(completeReq); Bar.Value = 100; UploadInfo(Bar.Value.ToString()); // 返回最终文件的MD5,用于用户进行校验 //Console.WriteLine(completeResult.ETag); setListItemValue(); } }
public void MultiUpload() { string key = multiKey; try { InitMultipartUploadRequest initMultipartUploadRequest = new InitMultipartUploadRequest(bucket, multiKey); //执行请求 InitMultipartUploadResult initMultipartUploadResult = cosXml.InitMultipartUpload(initMultipartUploadRequest); Console.WriteLine(initMultipartUploadResult.GetResultInfo()); string uploadId = initMultipartUploadResult.initMultipartUpload.uploadId; ListPartsRequest listPartsRequest = new ListPartsRequest(bucket, key, uploadId); //执行请求 ListPartsResult listPartsResult = cosXml.ListParts(listPartsRequest); Console.WriteLine(listPartsResult.GetResultInfo()); int partNumber = 1; UploadPartRequest uploadPartRequest = new UploadPartRequest(bucket, key, partNumber, uploadId, bigFileSrcPath); //设置进度回调 uploadPartRequest.SetCosProgressCallback(delegate(long completed, long total) { Console.WriteLine(String.Format("{0} progress = {1} / {2} : {3:##.##}%", DateTime.Now.ToString(), completed, total, completed * 100.0 / total)); }); //执行请求 UploadPartResult uploadPartResult = cosXml.UploadPart(uploadPartRequest); Console.WriteLine(uploadPartResult.GetResultInfo()); string eTag = uploadPartResult.eTag; CompleteMultipartUploadRequest completeMultiUploadRequest = new CompleteMultipartUploadRequest(bucket, key, uploadId); //设置已上传的parts completeMultiUploadRequest.SetPartNumberAndETag(partNumber, eTag); //执行请求 CompleteMultipartUploadResult completeMultiUploadResult = cosXml.CompleteMultiUpload(completeMultiUploadRequest); Console.WriteLine(completeMultiUploadResult.GetResultInfo()); } catch (COSXML.CosException.CosClientException clientEx) { Console.WriteLine("CosClientException: " + clientEx.StackTrace); Assert.True(false); } catch (COSXML.CosException.CosServerException serverEx) { Console.WriteLine("CosServerException: " + serverEx.GetInfo()); Assert.True(false); } }
private void UploadPart() { activieTasks = 0; int size = sliceList.Count; sliceCount = size; uploadPartRequestMap = new Dictionary <UploadPartRequest, long>(size); uploadPartRequestList = new List <UploadPartRequest>(size); for (int i = 0; i < size; i++) { lock (syncExit) { if (isExit) { return; } } SliceStruct sliceStruct = sliceList[i]; while (activieTasks > MAX_ACTIVIE_TASKS) { Thread.Sleep(5); } if (!sliceStruct.isAlreadyUpload) { UploadPartRequest uploadPartRequest = new UploadPartRequest(bucket, key, sliceStruct.partNumber, uploadId, srcPath, sliceStruct.sliceStart, sliceStruct.sliceLength); //打印进度 uploadPartRequest.SetCosProgressCallback(delegate(long completed, long total) { lock (syncProgress) { long dataLen = hasReceiveDataLength + completed - uploadPartRequestMap[uploadPartRequest]; UpdateProgress(dataLen, sendContentLength, false); hasReceiveDataLength = dataLen; uploadPartRequestMap[uploadPartRequest] = completed; } }); uploadPartRequestMap.Add(uploadPartRequest, 0); uploadPartRequestList.Add(uploadPartRequest); activieTasks++; cosXmlServer.UploadPart(uploadPartRequest, delegate(CosResult result) { lock (syncExit) { if (isExit) { return; } } activieTasks--; UploadPartResult uploadPartResult = result as UploadPartResult; sliceStruct.eTag = uploadPartResult.eTag; lock (syncPartCopyCount) { sliceCount--; if (sliceCount == 0) { OnPart(); return; } } }, delegate(CosClientException clientEx, CosServerException serverEx) { lock (syncExit) { if (isExit) { return; } } activieTasks--; if (UpdateTaskState(TaskState.FAILED)) { OnFailed(clientEx, serverEx); } return; }); } else { lock (syncPartCopyCount) { sliceCount--; if (sliceCount == 0) { OnPart(); return; } } } } }