using System; using System.IO; using Aliyun.OSS; namespace BP.Tools { public static class OSSUtil { /// /// 检查OSS服务的配置是否完整 /// /// private static void CheckOSSConfig() { if (BP.DA.DataType.IsNullOrEmpty(BP.Difference.SystemConfig.OSSEndpoint)) throw new Exception("err@检测到没有配置OSSEndpoint,请您配置OSSEndpoint后重新上传文件"); if (BP.DA.DataType.IsNullOrEmpty(BP.Difference.SystemConfig.OSSAccessKeyId)) throw new Exception("err@检测到没有配置OSSAccessKeyId,请您配置OSSAccessKeyId后重新上传文件"); if (BP.DA.DataType.IsNullOrEmpty(BP.Difference.SystemConfig.OSSAccessKeySecret)) throw new Exception("err@检测到没有配置OSSAccessKeySecret,请您配置OSSAccessKeySecret后重新上传文件"); if (BP.DA.DataType.IsNullOrEmpty(BP.Difference.SystemConfig.OSSBucketName)) throw new Exception("err@检测到没有配置OSSBucketName,请您配置OSSBucketName后重新上传文件"); } /// /// OSS上传文件 /// /// Object完整路径 /// 保存的临时文件路径 /// public static void doUpload(string objectName, string temp) { //检查配置 CheckOSSConfig(); // 创建OssClient实例。 var client = new OssClient(BP.Difference.SystemConfig.OSSEndpoint, BP.Difference.SystemConfig.OSSAccessKeyId, BP.Difference.SystemConfig.OSSAccessKeySecret); if (objectName.StartsWith("/")) objectName = objectName.Substring(1); try { // 上传文件。 client.PutObject(BP.Difference.SystemConfig.OSSBucketName, objectName, temp); } catch (Exception ex) { throw new Exception("err@ 上传失败, 错误提示信息:" + ex.Message); } } /// /// OSS下载文件 /// /// 文件全路径名 /// 临时文件路径 /// public static void doDownload(string fileFullNamem, string tempFile) { //检查配置 CheckOSSConfig(); // 创建OssClient实例。 var client = new OssClient(BP.Difference.SystemConfig.OSSEndpoint, BP.Difference.SystemConfig.OSSAccessKeyId, BP.Difference.SystemConfig.OSSAccessKeySecret); try { string subDir = ""; //判断是否有子目录路径 if (BP.DA.DataType.IsNullOrEmpty(BP.Difference.SystemConfig.BucketSubPath) == false && "/".Equals(BP.Difference.SystemConfig.BucketSubPath) == false) { subDir = BP.Difference.SystemConfig.BucketSubPath + "/"; } //转换路径 fileFullNamem = subDir + fileFullNamem.Replace("//", "/"); if (fileFullNamem.StartsWith("/")) fileFullNamem = fileFullNamem.Substring(1); // 下载文件到流。OssObject包含了文件的各种信息,如文件所在的存储空间、文件名、元信息以及一个输入流。 var obj = client.GetObject(BP.Difference.SystemConfig.OSSBucketName, fileFullNamem); using (var requestStream = obj.Content) { byte[] buf = new byte[1024]; var fs = File.Open(tempFile, FileMode.OpenOrCreate); var len = 0; // 通过输入流将文件的内容读取到文件或者内存中。 while ((len = requestStream.Read(buf, 0, 1024)) != 0) { fs.Write(buf, 0, len); } fs.Close(); } } catch (Exception ex) { throw new Exception("err@下载失败.错误提示信息: " + ex.Message); } } } }