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 私有方法
}
}