using System;
using System.Threading;
using System.Linq;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Library;
using System.Text.RegularExpressions;
using MySystem.Models;
namespace MySystem
{
public class OssHelper
{
string key = "LTAI5tAp9ASZtq4wYzuXfeer"; //阿里云AccessKey ID
string secret = "N0o6TwowU8r4aeNWoefMnnus9Q2saW"; //阿里云Access Key Secret
public string PathName = ConfigurationManager.AppSettings["Database"].ToString();
public string endpoint = "oss-cn-chengdu.aliyuncs.com"; //endpoint
public string bucketName = "kexiaoshuang";
public string SourceHost = ConfigurationManager.AppSettings["OssHost"].ToString();
public bool OssStatus = true;
public readonly static OssHelper Instance = new OssHelper();
private OssHelper()
{
// SystemSet set = new WebCMSEntities().SystemSet.FirstOrDefault() ?? new SystemSet();
// if (set.UploadOss == 1)
// {
// SourceHost = "http://" + ConfigurationManager.AppSettings["OSSBucketName"].ToString() + "." + ConfigurationManager.AppSettings["OSSEndpoint"].ToString();
// OssStatus = true;
// }
// else
// {
// SourceHost = "";
// OssStatus = false;
// }
}
public void Start()//启动
{
Thread thread = new Thread(threadStart);
thread.IsBackground = true;
thread.Start();
}
public void Add(string data)
{
function.WritePage("/OSSTempFiles/", function.MD532(Guid.NewGuid().ToString()) + ".txt", data);
}
private void threadStart()
{
var client = new OssClient(endpoint, key, secret);
while (true)
{
string dataFilePath = function.getPath("/OSSTempFiles/");
DirectoryInfo TheFolder = new DirectoryInfo(dataFilePath);
if (TheFolder.Exists)
{
//遍历文件
if (TheFolder.GetFiles().Length > 0)
{
try
{
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
string FileFullName = dataFilePath + NextFile.Name;
string data = function.ReadInstance("/OSSTempFiles/" + NextFile.Name);
ScanQueue(data, FileFullName, client);
}
}
catch (Exception ex)
{
function.WriteLog(ex.ToString(), "OSS上传队列异常");
}
}
}
//没有任务,休息1秒钟
Thread.Sleep(1000);
}
}
//要执行的方法
public void ScanQueue(string data, string FileFullName)
{
// SystemSet set = new WebCMSEntities().SystemSet.FirstOrDefault() ?? new SystemSet();
// if (set.UploadOss == 1)
if(OssStatus)
{
var client = new OssClient(endpoint, key, secret);
ScanQueue(data, FileFullName, client);
}
}
private void ScanQueue(string data, string FileFullName, OssClient client)
{
// 上传文件。
string localFile = function.getPath(PathName + data);
string filePath = data.TrimStart('/');
if (!data.StartsWith(PathName))
{
filePath = PathName + data;
}
var result = client.PutObject(bucketName, filePath, localFile, new ObjectMetadata()
{
ExpirationTime = DateTime.Parse("2050-12-31 23:59:59")
});
if (!string.IsNullOrEmpty(result.ETag))
{
if (result.ETag.Length == 32)
{
if (File.Exists(localFile))
{
File.Delete(localFile);
}
}
}
if (File.Exists(FileFullName))
{
File.Delete(FileFullName);
}
}
///
/// 解析编辑器中的图片(oss)
///
///
///
public string CheckOSSPic(string content)
{
if (string.IsNullOrEmpty(content))
{
content = "";
}
if (OssStatus)
{
MatchCollection MC = Regex.Matches(content, "");
foreach (Match match in MC)
{
string imgstr = match.Value;
Match submatch = Regex.Match(imgstr, "src=\".*?\"");
if (submatch.Success)
{
string src = submatch.Value.Replace("src=\"", "").Replace("\"", "");
if (!src.StartsWith("http"))
{
content = content.Replace(src, OssHelper.Instance.SourceHost + src);
}
}
}
}
return content;
}
}
}