外观
OSS
internal class Config
{
public static string AccessKeyId = "";
public static string AccessKeySecret = "";
public static string bucketName = "";
public static string Endpoint = "";
public static string DirToDownload = "<your local dir to download file>";
public static string FileToUpload = "<your local file to upload>";
public static string BigFileToUpload = "<your local big file to upload>";
public static string ImageFileToUpload = "<your local image file to upload>";
public static string CallbackServer = "<your callback server uri>";
} public class OSS
{
static OssClient client = new OssClient(Config.Endpoint, Config.AccessKeyId, Config.AccessKeySecret);
/// <summary>
/// 上传文件到oss
/// </summary>
/// <param name="key">上传保存的路径与文件名</param>
/// <param name="filePath">本地要上传的文件的路径</param>
public static bool PutFile(string key, string filePath, EventHandler<StreamTransferProgressArgs> streamProgressCallback)
{
try
{
using (var fs = File.Open(filePath, FileMode.Open))
{
var putObjectRequest = new PutObjectRequest(Config.bucketName, key, fs);
putObjectRequest.StreamTransferProgress += streamProgressCallback;
PutObjectResult result = client.PutObject(putObjectRequest);
return result.HttpStatusCode == System.Net.HttpStatusCode.OK;
}
}
catch (Exception ex) { Debug.WriteLine("-----------" + ex.Message); return false; }
}
public static void DownloadFile(string key, string savePath, out string errmsg, EventHandler<StreamTransferProgressArgs> streamProgressCallback)
{
errmsg = "";
//client.PutObject(Config.bucketName, key, @"D:\" + key);
try
{
var getObjectRequest = new GetObjectRequest(Config.bucketName, key);
getObjectRequest.StreamTransferProgress += streamProgressCallback;
var ossObject = client.GetObject(getObjectRequest);
using (var stream = ossObject.Content)
{
var buffer = new byte[1024 * 1024];
var bytesTotal = 0;
var bytesRead = 0;
using (FileStream fileStream = new FileStream(savePath, FileMode.Create))
{
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
bytesTotal += bytesRead;
fileStream.Write(buffer, 0, bytesRead);
}
}
}
Log.Logger.Debug($"下载文件[{key}]\n 下载结果:{JSONHelper.EntityToJSON(ossObject)}");
Console.WriteLine("Get object:{0} succeeded", key);
}
catch (Aliyun.OSS.Common.OssException ossex) { if (ossex.ErrorCode == "NoSuchKey") { errmsg = "下载的文件不存在!"; } }
catch (Exception ex) { errmsg = ex.Message; Log.Logger.Debug($"下载文件{key}异常\n{ex.Message}\n{JSONHelper.EntityToJSON(ex.StackTrace)}"); }
}
private static void streamProgressCallback1(object sender, StreamTransferProgressArgs args)
{
Log.Logger.Debug($"进度 - 已传输:{args.TransferredBytes}/{args.TotalBytes}, 进度:{Math.Round((double)args.TransferredBytes / args.TotalBytes, 2) * 100}%, 递增:{args.IncrementTransferred}");
}
/// <summary>
/// 删除多少天前的文件
/// </summary>
/// <param name="keyday"></param>
public static void DeleteByDate(int keyday)
{
try
{
var keys = new List<string>();
var listResult = client.ListObjects(Config.bucketName);
foreach (var summary in listResult.ObjectSummaries)
{
int day = (DateTime.Now - summary.LastModified).Days;
if (day > keyday) keys.Add(summary.Key);
}
Log.Logger.Debug($"删除文件 => OSS共 {listResult.ObjectSummaries.Count()} 个文件,删除超过 {keyday} 天的文件 {keys.Count} 个。\r\n{string.Join("、", keys)}");
var request = new DeleteObjectsRequest(Config.bucketName, keys, false);
DeleteObjectsResult deleteObjectsResult = client.DeleteObjects(request);
Log.Logger.Debug($"删除结果:{JSONHelper.EntityToJSON(deleteObjectsResult)}");
}
catch (Exception ex) { }
}
/// <summary>
/// 列出所有文件
/// </summary>
public static void ListFiles()
{
var result = client.ListObjects(Config.bucketName);
Console.WriteLine("List files of bucket:{0} succeeded ", Config.bucketName);
foreach (var summary in result.ObjectSummaries)
{
Debug.WriteLine($"{summary.Key} {summary.LastModified.ToString("f")} {summary.Size / 1024}kb ");
}
}
}