|
|
|
|
using Amazon;
|
|
|
|
|
using Amazon.Runtime;
|
|
|
|
|
using Amazon.S3;
|
|
|
|
|
using System;
|
|
|
|
|
using S3Demo.Storage;
|
|
|
|
|
using S3Demo.Model;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace S3Demo
|
|
|
|
|
{
|
|
|
|
|
public class Run
|
|
|
|
|
{
|
|
|
|
|
private static BasicAWSCredentials credentials = new BasicAWSCredentials("admin", "admin123.");
|
|
|
|
|
//private static BasicAWSCredentials credentials = new BasicAWSCredentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");
|
|
|
|
|
private static string bucketName = "minio/test";
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html
|
|
|
|
|
/// https://blog.csdn.net/tw_tangliang/article/details/118669099
|
|
|
|
|
/// https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/dotnetv3/S3/UploadFileMPUHighLevelAPIExample/UploadFileMPUHighLevelAPIExample/UploadFileMPUHighLevelAPI.cs
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
|
|
// 通过IP + Port方式
|
|
|
|
|
private static AmazonS3Config conf = new AmazonS3Config()
|
|
|
|
|
{
|
|
|
|
|
UseHttp = true,
|
|
|
|
|
ProxyHost = "http://192.168.60.132",
|
|
|
|
|
ProxyPort = 9000,
|
|
|
|
|
RegionEndpoint = RegionEndpoint.USEast1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//通过固定域名的方式
|
|
|
|
|
//private static AmazonS3Config conf = new AmazonS3Config()
|
|
|
|
|
//{
|
|
|
|
|
// ServiceURL = "https://play.min.io",
|
|
|
|
|
// ForcePathStyle = true
|
|
|
|
|
//};
|
|
|
|
|
|
|
|
|
|
// 监控目录
|
|
|
|
|
|
|
|
|
|
// D:\ClientDir\line01\AOI\20211129\133055851SN001OK.png
|
|
|
|
|
private static string[] paths = { @"D:\ClientDir" };
|
|
|
|
|
private static string suffix = "*.png";
|
|
|
|
|
private static bool incsubdir = true;
|
|
|
|
|
public static void Main()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//FileModel.onFileChange(paths, suffix, true);
|
|
|
|
|
//await CreateBucket.CreatingBucket("minio/bu29", credentials, conf);
|
|
|
|
|
|
|
|
|
|
foreach (var path in paths)
|
|
|
|
|
{
|
|
|
|
|
FileSystemWatcher watch = new FileSystemWatcher()
|
|
|
|
|
{
|
|
|
|
|
Path = path,
|
|
|
|
|
Filter = suffix,
|
|
|
|
|
IncludeSubdirectories = incsubdir,
|
|
|
|
|
NotifyFilter = NotifyFilters.LastAccess
|
|
|
|
|
| NotifyFilters.LastWrite
|
|
|
|
|
| NotifyFilters.FileName
|
|
|
|
|
| NotifyFilters.DirectoryName,
|
|
|
|
|
};
|
|
|
|
|
watch.Created += new FileSystemEventHandler(OnCreated);
|
|
|
|
|
watch.Error += OnError;
|
|
|
|
|
// 开始监控
|
|
|
|
|
watch.EnableRaisingEvents = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region S3相关测试
|
|
|
|
|
/*
|
|
|
|
|
//creating Bucket
|
|
|
|
|
//await CreateBucket.CreatingBucket("minio/bu29", credentials, conf);
|
|
|
|
|
|
|
|
|
|
//upload Dir
|
|
|
|
|
string dirPath = @"C:\Users\song\Pictures\Saved Pictures\";
|
|
|
|
|
string suffix = "*.png";
|
|
|
|
|
//await UploadDirMPUHighLevelAPI.Uploaderdir(bucketName, dirPath, suffix, credentials, conf);
|
|
|
|
|
|
|
|
|
|
//upload File
|
|
|
|
|
string keyName = "logo.png";
|
|
|
|
|
//await UploadFileMPUHighLevelAPI.Uploaderfile(bucketName, keyName, dirPath, credentials, conf);
|
|
|
|
|
|
|
|
|
|
//list Objects
|
|
|
|
|
//await ListObjects.Listingobjects(bucketName, credentials, conf);
|
|
|
|
|
|
|
|
|
|
//upload Object With Tag
|
|
|
|
|
string filaPath = @"C:\Users\song\Pictures\Saved Pictures\" + keyName;
|
|
|
|
|
String[] tags = new String[] { "SN123456", DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:sszzz"), "AB023" };
|
|
|
|
|
//await ObjectModel.Putobjectswithtags(bucketName, keyName, filaPath, tags, credentials, conf);
|
|
|
|
|
|
|
|
|
|
//read Object
|
|
|
|
|
//await ObjectModel.Readobjectdata(bucketName, keyName, credentials, conf);
|
|
|
|
|
|
|
|
|
|
//isExist Bucket
|
|
|
|
|
//从"minio/test"中取出存储桶名
|
|
|
|
|
var _bucketName = bucketName.Split('/')[1];
|
|
|
|
|
//此处传入bucketName: "test"
|
|
|
|
|
//var flag = await BucketModel.isExistBucket(_bucketName, credentials, conf);
|
|
|
|
|
//if (flag)
|
|
|
|
|
//{
|
|
|
|
|
// Console.WriteLine("exist");
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// Console.WriteLine("not exist");
|
|
|
|
|
// //docker创建buckeyt时此处传入BucketName: "minio/test"
|
|
|
|
|
// //play.min.io创建buckeyt时传入BucketName: "test"
|
|
|
|
|
// await BucketModel.CreateBucket(bucketName, credentials, conf);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
////删除桶:docker删除桶"minio/test"; play.min.io删除桶"test"
|
|
|
|
|
//await new AmazonS3Client(credentials, conf).DeleteBucketAsync(bucketName);
|
|
|
|
|
//Console.WriteLine("delete bucket " + bucketName);
|
|
|
|
|
*/
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 路径解析
|
|
|
|
|
//string fullpath = @"C:\line01\AOI\20211129\120955851P107CN14T00001OK.png";
|
|
|
|
|
//string fileName = System.IO.Path.GetFileNameWithoutExtension(fullpath);
|
|
|
|
|
//string date = System.IO.Path.GetDirectoryName(fullpath).Split('\\')[3];
|
|
|
|
|
//string equipmentName = System.IO.Path.GetDirectoryName(fullpath).Split('\\')[2];
|
|
|
|
|
//Console.WriteLine("filename: " + fileName);
|
|
|
|
|
//Console.WriteLine("date: " + date);
|
|
|
|
|
//Console.WriteLine("equipmentName: " + equipmentName);
|
|
|
|
|
////string time = Regex.Match(fileName, @"\d{9}").Value;
|
|
|
|
|
//string time = fileName.Substring(0, 9);
|
|
|
|
|
//string sn = fileName.Substring(time.Length, 14);
|
|
|
|
|
//string code = fileName.Substring(fileName.Length - 2, 2);
|
|
|
|
|
//Console.WriteLine("time: " + time);
|
|
|
|
|
//Console.WriteLine("sn: " + sn);
|
|
|
|
|
//Console.WriteLine("code: " + code);
|
|
|
|
|
//string datetime = date + time;
|
|
|
|
|
//Console.WriteLine("datetime: " + datetime);
|
|
|
|
|
//string dt = DateTime.ParseExact(datetime, "yyyyMMddHHmmssfff", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd HH:mm:ss:fff");
|
|
|
|
|
//Console.WriteLine("format: " + dt);
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(ex.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Console.ReadKey();
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 监控到创建文件
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private static void OnCreated(object sender, FileSystemEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string lineName = Path.GetDirectoryName(e.FullPath).Split('\\')[2];
|
|
|
|
|
string equipmentName = Path.GetDirectoryName(e.FullPath).Split('\\')[3];
|
|
|
|
|
string date = Path.GetDirectoryName(e.FullPath).Split('\\')[4];
|
|
|
|
|
string fileName = Path.GetFileName(e.FullPath);
|
|
|
|
|
string datetime = date + fileName.Substring(0, 9);
|
|
|
|
|
string dt_fomat = DateTime.ParseExact(datetime, "yyyyMMddHHmmssfff", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd HH:mm:ss:fff");
|
|
|
|
|
string code = fileName.Substring(fileName.Length - 6, 2);
|
|
|
|
|
string sn = fileName.Substring(9, 14);
|
|
|
|
|
String[] tags = new String[] { sn, dt_fomat, code };
|
|
|
|
|
string S3Path = lineName + "/" + equipmentName + "/" + date + "/" + fileName;
|
|
|
|
|
|
|
|
|
|
//没有使用异步线程,可能没有足够的时间等待返回结果 [说明](https://www.cnblogs.com/lnwuyaowei/p/12672866.html)
|
|
|
|
|
string flag = ObjectModel.Putobjectswithtags(bucketName, S3Path, e.FullPath, tags, credentials, conf).Result;
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("S3对象存储路径: " + bucketName + "/" + S3Path);
|
|
|
|
|
Console.WriteLine("上传返回: " + flag);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(ex.Message.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 出现错误
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private static void OnError(object sender, ErrorEventArgs e) =>
|
|
|
|
|
PrintException(e.GetException());
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 打印错误
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="ex"></param>
|
|
|
|
|
private static void PrintException(Exception? ex)
|
|
|
|
|
{
|
|
|
|
|
if (ex != null)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Message: {ex.Message}");
|
|
|
|
|
Console.WriteLine("Stacktrace:");
|
|
|
|
|
Console.WriteLine(ex.StackTrace);
|
|
|
|
|
Console.WriteLine();
|
|
|
|
|
PrintException(ex.InnerException);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|