You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
8.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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);
}
}
}
}