示例#1
0
        public void Rename(string oldname, string newname)
        {
            try
            {
                cosXml = GetCosXml();
                string sourceAppid  = _cosOptions.Appid;
                string sourceBucket = _cosOptions.Bucket;
                string sourceRegion = _cosOptions.Region;
                string sourceKey    = GetFullKey(oldname);

                CopySourceStruct copySource = new CopySourceStruct(sourceAppid, sourceBucket, sourceRegion, sourceKey);

                string            bucket  = _cosOptions.Bucket;
                string            key     = GetFullKey(newname);
                CopyObjectRequest request = new CopyObjectRequest(bucket, key);

                request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), KEY_DURATION_SECOND);
                request.SetCopySource(copySource);
                request.SetCopyMetaDataDirective(COSXML.Common.CosMetaDataDirective.COPY);

                CopyObjectResult result = cosXml.CopyObject(request);

                //Console.WriteLine(result.GetResultInfo());

                Delete(oldname);
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                Logging.Log.WriteErrorMessage(LOGTAG, "Rename", clientEx, "Rename failed: {0} to {1}", oldname, newname);
                throw;
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                Logging.Log.WriteErrorMessage(LOGTAG, "Rename", serverEx, "Rename failed: {0} to {1}, {2}", oldname, newname, serverEx.GetInfo());
                throw;
            }
        }
        private QCloudServer()
        {
            QLog.SetLogLevel(Level.V);

            uin                       = "1278687956";
            appid                     = "1253653367";
            bucketVersioning          = "dotnet-ut-versioning-1253653367";
            regionForBucketVersioning = "ap-beijing";
            bucketForObjectTest       = "dotnet-ut-obj-1253653367";
            region                    = "ap-guangzhou";

            secretId  = Environment.GetEnvironmentVariable("COS_KEY");
            secretKey = Environment.GetEnvironmentVariable("COS_SECRET");
            if (secretId == null)
            {
                secretId  = Environment.GetEnvironmentVariable("COS_KEY", EnvironmentVariableTarget.Machine);
                secretKey = Environment.GetEnvironmentVariable("COS_SECRET", EnvironmentVariableTarget.Machine);
            }

            CosXmlConfig config = new CosXmlConfig.Builder()
                                  .SetAppid(appid)
                                  .SetRegion(region)
                                  .SetDebugLog(true)
                                  .IsHttps(true)
                                  .SetConnectionLimit(512)
                                  .SetConnectionTimeoutMs(10 * 1000)
                                  .SetReadWriteTimeoutMs(10 * 1000)
                                  .Build();


            long keyDurationSecond = 600;

            QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, keyDurationSecond);


            cosXml = new CosXmlServer(config, qCloudCredentialProvider);
        }
示例#3
0
 /// <summary>
 /// 获取Cos操作的CosXml类
 /// </summary>
 /// <param name="tmpSecretId">临时密钥 SecretId</param>
 /// <param name="tmpSecretKey">临时密钥 SecretKey</param>
 /// <param name="tmpToken">临时密钥 token</param>
 /// <param name="tmpExpireTime">临时密钥有效截止时间,精确到秒</param>
 public CosXml getCosXml(string tmpSecretId, string tmpSecretKey, string tmpToken, long tmpExpireTime)
 {
     cosCredentialProvider = new DefaultSessionQCloudCredentialProvider(tmpSecretId, tmpSecretKey, tmpExpireTime, tmpToken);
     cosXml = new CosXmlServer(config, cosCredentialProvider);
     return(cosXml);
 }
 public TencentCosStorageUploadProcessor(TencentCosStorageConfigure configure, CosXml client, IFileNameGenerator fileNameGenerator, ISubdirectoryGenerator subdirectoryGenerator, IFileValidator fileValidator)
 {
     Configure             = configure;
     Client                = client;
     FileNameGenerator     = fileNameGenerator;
     SubdirectoryGenerator = subdirectoryGenerator;
     FileValidator         = fileValidator;
 }
示例#5
0
        public void Run()
        {
            FileRequest fileRequest = new FileRequest();
            int         status      = fileRequest.Download(File.Id, out FileListResponse res);

            switch (status)
            {
            case -20000:
                TaskStatusDetectionThread.Abort();
                DownloadTaskList.SetFailure(File.Key, "请求服务器失败,请稍后再试。");
                break;

            case -20001:
                TaskStatusDetectionThread.Abort();
                DownloadTaskList.SetFailure(File.Key, "请求下载的文件不存在。");
                break;

            case -10000:
                TaskStatusDetectionThread.Abort();
                DownloadTaskList.SetFailure(File.Key, res.message);
                break;

            case 0:
            {
                string bucket        = res.data.tencentCos.bucket;    //存储桶,格式:BucketName-APPID
                string cosPath       = res.data.files[0].storageName; //对象在存储桶中的位置标识符,即称对象键
                string localDir      = File.LocalPath;                //本地文件夹
                string localFileName = File.FileName;                 //指定本地保存的文件名

                CosService      cosService      = new CosService(res.data.tencentCos.region);
                CosXml          cosXml          = cosService.getCosXml(res.data.token.credentials.tmpSecretId, res.data.token.credentials.tmpSecretKey, res.data.token.credentials.token, res.data.token.expiredTime);
                TransferConfig  transferConfig  = new TransferConfig();
                TransferManager transferManager = new TransferManager(cosXml, transferConfig);
                downloadTask = new COSXMLDownloadTask(bucket, cosPath, localDir, localFileName);

                downloadTask.progressCallback = delegate(long completed, long total)
                {
                    DownloadTaskList.SetProgress(File.Key, completed, total);
                    Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                };
                downloadTask.successCallback = delegate(CosResult cosResult)
                {
                    TaskStatusDetectionThread.Abort();
                    COSXMLDownloadTask.DownloadTaskResult result = cosResult as COSXMLDownloadTask.DownloadTaskResult;
                    Console.WriteLine("successCallback: " + result.GetResultInfo());
                    string eTag = result.eTag;
                    DownloadTaskList.SetSuccess(File.Key);
                };
                downloadTask.failCallback = delegate(CosClientException clientEx, CosServerException serverEx)
                {
                    if (clientEx != null)
                    {
                        Console.WriteLine("CosClientException: " + clientEx);
                    }
                    if (serverEx != null)
                    {
                        Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                    }
                    TaskStatusDetectionThread.Abort();
                    DownloadTaskList.SetFailure(File.Key, "COS下载出错。");
                };
                transferManager.Download(downloadTask);
            }
            break;

            default:
                TaskStatusDetectionThread.Abort();
                DownloadTaskList.SetFailure(File.Key, "未知原因下载失败。");
                break;
            }
        }
示例#6
0
 public TencentCosStorageMergeProcessor(ChunkedUploadTencentCosStorageConfigure configure, CosXml client, IMemoryCache memoryCache)
 {
     Configure   = configure;
     MemoryCache = memoryCache;
     Client      = client;
 }
示例#7
0
        public void Run()
        {
            string srcPath = File.LocalPath + "\\" + File.FileName;    //本地文件绝对路径

            FileRequest fileRequest = new FileRequest();
            int         status      = fileRequest.Upload(srcPath, File.RemotePath + "\\" + File.FileName, out UploadResponse res);

            switch (status)
            {
            case -20000:
                TaskStatusDetectionThread.Abort();
                UploadTaskList.SetFailure(File.Key, "请求服务器失败,请稍后再试。");
                break;

            case -10000:
                TaskStatusDetectionThread.Abort();
                UploadTaskList.SetFailure(File.Key, res.message);
                break;

            case 101:
                TaskStatusDetectionThread.Abort();
                UploadTaskList.SetProgress(File.Key, 1, 1);
                UploadTaskList.SetSuccess(File.Key);
                break;

            case 100:
            {
                string bucket  = res.data.tencentCos.bucket;          //存储桶,格式:BucketName-APPID
                string cosPath = res.data.file.storageName;           //对象在存储桶中的位置标识符,即称对象键

                CosService       cosService       = new CosService(res.data.tencentCos.region);
                CosXml           cosXml           = cosService.getCosXml(res.data.token.credentials.tmpSecretId, res.data.token.credentials.tmpSecretKey, res.data.token.credentials.token, res.data.token.expiredTime);
                TransferConfig   transferConfig   = new TransferConfig();
                TransferManager  transferManager  = new TransferManager(cosXml, transferConfig);
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
                uploadTask = new COSXMLUploadTask(putObjectRequest);

                uploadTask.SetSrcPath(srcPath);

                uploadTask.progressCallback = delegate(long completed, long total)
                {
                    UploadTaskList.SetProgress(File.Key, completed, total);
                    Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
                };
                uploadTask.successCallback = delegate(CosResult cosResult)
                {
                    TaskStatusDetectionThread.Abort();
                    fileRequest.ConfirmUpload(res.data.file.id, res.data.file.guid);
                    COSXMLUploadTask.UploadTaskResult result = cosResult as COSXMLUploadTask.UploadTaskResult;
                    Console.WriteLine("successCallback: " + result.GetResultInfo());
                    string eTag = result.eTag;
                    UploadTaskList.SetSuccess(File.Key);
                };
                uploadTask.failCallback = delegate(CosClientException clientEx, CosServerException serverEx)
                {
                    if (clientEx != null)
                    {
                        Console.WriteLine("CosClientException: " + clientEx);
                    }
                    if (serverEx != null)
                    {
                        Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                    }
                    TaskStatusDetectionThread.Abort();
                    UploadTaskList.SetFailure(File.Key, "COS上传出错。");
                };

                transferManager.Upload(uploadTask);
            }
            break;

            default:
                TaskStatusDetectionThread.Abort();
                UploadTaskList.SetFailure(File.Key, "未知原因上传失败。");
                break;
            }
        }
示例#8
0
 public TencentCosService(IOptions <TencentCosOptions> options)
 {
     _cosConfig = options.Value;
     _cosXml    = InitCosXml();
 }
示例#9
0
 public TencentCosStorageChunkedUploadProcessor(ChunkedUploadTencentCosStorageConfigure configure, IFileValidator fileValidator, CosXml client, IMemoryCache memoryCache, IFileNameGenerator fileNameGenerator, ISubdirectoryGenerator subdirectoryGenerator)
 {
     Configure             = configure;
     FileValidator         = fileValidator;
     MemoryCache           = memoryCache;
     FileNameGenerator     = fileNameGenerator;
     SubdirectoryGenerator = subdirectoryGenerator;
     Client = client;
 }
示例#10
0
 public void InitCosXmlServer(CosXml cosXml)
 {
     cosXmlServer = cosXml;
 }