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"; /// /// 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 /// // 通过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 //}; // 监控目录 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(); } /// /// 监控到创建文件 /// /// /// 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()); } } /// /// 出现错误 /// /// /// private static void OnError(object sender, ErrorEventArgs e) => PrintException(e.GetException()); /// /// 打印错误 /// /// 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); } } } }