FieldWorkClient/Services/UploadHelper.cs

85 lines
2.8 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using Minio;
using Minio.DataModel;
using Minio.DataModel.Args;
namespace Hopetry.Services
{
public static class UploadHelper
{
/// <summary>
/// 带重试机制的安全文件上传
/// </summary>
/// <param name="client">MinIO客户端</param>
/// <param name="bucketName">存储桶名称</param>
/// <param name="filePath">本地文件路径</param>
/// <param name="objectName">对象名称</param>
/// <param name="progressCallback">进度回调</param>
/// <returns>上传是否成功</returns>
public static async Task<bool> SafeUploadFileAsync(
IMinioClient client,
string bucketName,
string filePath,
string objectName,
IProgress<ProgressReport> progressCallback = null)
{
// 验证输入参数
if (string.IsNullOrWhiteSpace(bucketName) || string.IsNullOrWhiteSpace(filePath) || string.IsNullOrWhiteSpace(objectName))
{
Console.WriteLine("上传参数验证失败");
return false;
}
// 检查文件是否存在
if (!File.Exists(filePath))
{
Console.WriteLine($"文件不存在: {filePath}");
return false;
}
try
{
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithFileName(filePath)
.WithProgress(progressCallback);
await client.PutObjectAsync(putObjectArgs);
return true; // 上传成功
}
catch (Exception ex)
{
Console.WriteLine($"上传失败: {ex.Message}");
return false; // 让调用方决定是否重试
}
}
/// <summary>
/// 检查文件是否已存在于MinIO中
/// </summary>
/// <param name="client">MinIO客户端</param>
/// <param name="bucketName">存储桶名称</param>
/// <param name="objectName">对象名称</param>
/// <returns>文件是否存在</returns>
public static async Task<bool> CheckFileExistsAsync(IMinioClient client, string bucketName, string objectName)
{
try
{
var args = new StatObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName);
var stat = await client.StatObjectAsync(args);
return true;
}
catch (Exception)
{
// 文件不存在或无法访问
return false;
}
}
}
}