using Aliyun.OSS; using QWPlatform.SystemLibrary.LogManager; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Web; namespace PMS.Plugins.AliFileUpload { public class AliFileUpload { private static Logger Log = Logger.Instance; private static string OSSAccessKeyId = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["OSSAccessKeyId"].Trim());//OSSAccessKeyId private static string OSSAccessKeySecret = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["OSSAccessKeySecret"].Trim());//OSSAccessKeySecret private static string _http = "https://oss-cn-beijing.aliyuncs.com";// 主机名oss-cn-beijing.aliyuncs.com private const string _bucketName = "ikuaizi";//Bucket名称 //private static string _http = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["_http"].Trim()); //private static string _bucketName = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["_bucketName"].Trim()); /// /// 初始化OSS实例对象 /// public static class OssManager { private static OssClient ossClient; public static OssClient GetInstance() { if (ossClient == null) { ossClient = new OssClient(_http, OSSAccessKeyId, OSSAccessKeySecret); } return ossClient; } } #region 上传文件 /// /// 以文件流的形式上传文件oss /// /// HttpPostedFile /// 上传类别 /// 上传人 /// 后缀名 /// 返回阿里的文件名称 public static string PutObjectFileStream(HttpFileCollectionBase Files) { string keyname = ""; var selectUrl = ""; try { var uploadFile = Files[0]; //获得一个OssClient实例 OssClient _client = OssManager.GetInstance(); Random ra = new Random(); var time= DateTime.Now.ToString("yyyyHHddHHmmss") + ra.Next().ToString(); keyname = "问题管理系统/" + time+uploadFile.FileName; ObjectMetadata metadata = new ObjectMetadata(); // 可以设定自定义的metadata。 metadata.ContentType = uploadFile.ContentType; using (var fu = uploadFile.InputStream) { var rest = _client.PutObject(_bucketName, keyname, fu, metadata); if (rest.HttpStatusCode == System.Net.HttpStatusCode.OK) { Log.Info("阿里文件上传成功"); selectUrl = SelcetFileSddress(keyname); } } } catch (Exception ex) { Log.Error("阿里上传文件异常;" + ex.Message); } return selectUrl; } #endregion 上传文件 #region 文件查询 /// /// 查询阿里的访问文件地址 /// /// 阿里文件地址 /// public static string SelcetFileSddress(string name) { try { OssClient _client = OssManager.GetInstance(); //失效时间 var req = new GeneratePresignedUriRequest(_bucketName, name, SignHttpMethod.Get) { Expiration = DateTime.Now.AddHours(1), }; var url = _client.GeneratePresignedUri(req).ToString(); Log.Info(url); url = "https://ikuaizi.oss-cn-beijing.aliyuncs.com/" + name; return url; } catch (Exception ex) { Log.Error("获取地址失败" + ex.Message); } return ""; } #endregion 文件查询 #region 私有方法 /// /// 获取文件名称 /// /// 上传人id /// private static string GeneratingFileName(string uploadingPerson) { if (string.IsNullOrEmpty(uploadingPerson)) { string raw = Guid.NewGuid().ToString("N").ToUpper();//生成raw16 uploadingPerson = raw; } Random ra = new Random(); return uploadingPerson + "_" + DateTime.Now.ToString("yyyyHHddHHmmss") + ra.Next().ToString(); } #endregion 私有方法 } }