AliFileUpload.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using Aliyun.OSS;
  2. using QWPlatform.SystemLibrary.LogManager;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Configuration;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Security.Cryptography;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Web;
  12. namespace PMS.Plugins.AliFileUpload
  13. {
  14. public class AliFileUpload
  15. {
  16. private static Logger Log = Logger.Instance;
  17. private static string OSSAccessKeyId = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["OSSAccessKeyId"].Trim());//OSSAccessKeyId
  18. private static string OSSAccessKeySecret = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["OSSAccessKeySecret"].Trim());//OSSAccessKeySecret
  19. private static string _http = "https://oss-cn-beijing.aliyuncs.com";// 主机名oss-cn-beijing.aliyuncs.com
  20. private const string _bucketName = "ikuaizi";//Bucket名称
  21. //private static string _http = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["_http"].Trim());
  22. //private static string _bucketName = QWPlatform.SystemLibrary.Security.DESEncrypt.DesDecrypt(ConfigurationManager.AppSettings["_bucketName"].Trim());
  23. /// <summary>
  24. /// 初始化OSS实例对象
  25. /// </summary>
  26. public static class OssManager
  27. {
  28. private static OssClient ossClient;
  29. public static OssClient GetInstance()
  30. {
  31. if (ossClient == null)
  32. {
  33. ossClient = new OssClient(_http, OSSAccessKeyId, OSSAccessKeySecret);
  34. }
  35. return ossClient;
  36. }
  37. }
  38. #region 上传文件
  39. /// <summary>
  40. /// 以文件流的形式上传文件oss
  41. /// </summary>
  42. /// <param name="file">HttpPostedFile</param>
  43. /// <param name="type">上传类别</param>
  44. /// <param name="uploadingPerson">上传人</param>
  45. /// <param name="suffixName">后缀名</param>
  46. /// <returns>返回阿里的文件名称</returns>
  47. public static string PutObjectFileStream(HttpFileCollectionBase Files)
  48. {
  49. string keyname = "";
  50. var selectUrl = "";
  51. try
  52. {
  53. var uploadFile = Files[0];
  54. //获得一个OssClient实例
  55. OssClient _client = OssManager.GetInstance();
  56. Random ra = new Random();
  57. var time= DateTime.Now.ToString("yyyyHHddHHmmss") + ra.Next().ToString();
  58. keyname = "问题管理系统/" + time+uploadFile.FileName;
  59. ObjectMetadata metadata = new ObjectMetadata();
  60. // 可以设定自定义的metadata。
  61. metadata.ContentType = uploadFile.ContentType;
  62. using (var fu = uploadFile.InputStream)
  63. {
  64. var rest = _client.PutObject(_bucketName, keyname, fu, metadata);
  65. if (rest.HttpStatusCode == System.Net.HttpStatusCode.OK)
  66. {
  67. Log.Info("阿里文件上传成功");
  68. selectUrl = SelcetFileSddress(keyname);
  69. }
  70. }
  71. }
  72. catch (Exception ex)
  73. {
  74. Log.Error("阿里上传文件异常;" + ex.Message);
  75. }
  76. return selectUrl;
  77. }
  78. #endregion 上传文件
  79. #region 文件查询
  80. /// <summary>
  81. /// 查询阿里的访问文件地址
  82. /// </summary>
  83. /// <param name="name">阿里文件地址</param>
  84. /// <returns></returns>
  85. public static string SelcetFileSddress(string name)
  86. {
  87. try
  88. {
  89. OssClient _client = OssManager.GetInstance();
  90. //失效时间
  91. var req = new GeneratePresignedUriRequest(_bucketName, name, SignHttpMethod.Get)
  92. {
  93. Expiration = DateTime.Now.AddHours(1),
  94. };
  95. var url = _client.GeneratePresignedUri(req).ToString();
  96. Log.Info(url);
  97. url = "https://ikuaizi.oss-cn-beijing.aliyuncs.com/" + name;
  98. return url;
  99. }
  100. catch (Exception ex)
  101. {
  102. Log.Error("获取地址失败" + ex.Message);
  103. }
  104. return "";
  105. }
  106. #endregion 文件查询
  107. #region 私有方法
  108. /// <summary>
  109. /// 获取文件名称
  110. /// </summary>
  111. /// <param name="uploadingPerson">上传人id</param>
  112. /// <returns></returns>
  113. private static string GeneratingFileName(string uploadingPerson)
  114. {
  115. if (string.IsNullOrEmpty(uploadingPerson))
  116. {
  117. string raw = Guid.NewGuid().ToString("N").ToUpper();//生成raw16
  118. uploadingPerson = raw;
  119. }
  120. Random ra = new Random();
  121. return uploadingPerson + "_" + DateTime.Now.ToString("yyyyHHddHHmmss") + ra.Next().ToString();
  122. }
  123. #endregion 私有方法
  124. }
  125. }