新的配置方式,新的SimApiStorage,移除了SimApiUPload

This commit is contained in:
2021-06-03 13:43:46 +08:00
parent 8f41ba0150
commit 3ec378c4fa
8 changed files with 377 additions and 294 deletions
+81
View File
@@ -0,0 +1,81 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Http;
using Minio;
using Minio.Exceptions;
using SimApi.Configs;
namespace SimApi.Helpers
{
public class SimApiStorage
{
private MinioClient Mc { get; }
private string ServeUrl { get; }
private string Bucket { get; }
private IHttpContextAccessor HttpContextAccessor { get; }
public SimApiStorage(SimApiOptions apiOptions, IHttpContextAccessor httpContextAccessor)
{
var options = apiOptions.SimApiStorageOptions;
HttpContextAccessor = httpContextAccessor;
var useSsl = false;
var endpoint = string.Empty;
if (options.Endpoint.StartsWith("http://"))
{
endpoint = options.Endpoint.Replace("http://", string.Empty);
}
else if (options.Endpoint.StartsWith("https://"))
{
endpoint = options.Endpoint.Replace("https://", string.Empty);
useSsl = true;
}
else
{
throw new Exception("SimApiStorage: Error Endpoint");
}
ServeUrl = options.ServeUrl;
Bucket = options.Bucket;
if (useSsl)
{
Mc = new MinioClient(endpoint, options.AccessKey, options.SecretKey).WithSSL();
}
else
{
Mc = new MinioClient(endpoint, options.AccessKey, options.SecretKey);
}
bool found = Mc.BucketExistsAsync(Bucket).Result;
if (!found)
{
Mc.MakeBucketAsync(Bucket).Wait();
}
}
public string UploadFile(string path, Stream stream)
{
try
{
Mc.PutObjectAsync(Bucket, path, stream, stream.Length).Wait();
return null;
}
catch (MinioException e)
{
Console.WriteLine("Error occurred: " + e);
return e.Message;
}
}
public string FullUrl(string path)
{
var httpRequest = HttpContextAccessor.HttpContext.Request;
var url = $"{httpRequest.Scheme}://{httpRequest.Host}";
if (string.IsNullOrEmpty(path))
{
return path;
}
return path.StartsWith("~") ? url + path.Substring(1, path.Length - 1) : $"{ServeUrl}{path}";
}
}
}
-103
View File
@@ -1,103 +0,0 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace SimApi.Helpers
{
public class SimApiUpload
{
private string FilePathFolder = "/uploads/";
public string FilePath
{
set
{
if (!value.StartsWith("/"))
{
FilePathFolder = $"/{value}";
}
if (!FilePathFolder.EndsWith("/"))
{
FilePathFolder += "/";
}
}
get
{
return FilePathFolder;
}
}
private IWebHostEnvironment Env { get; }
public SimApiUpload(IWebHostEnvironment env)
{
Env = env;
}
public class SimApiUploadInfo
{
public string Path { get; set; }
public int Size { get; set; }
}
/// <summary>
/// 保存base64文件,如果有标头按照标头自动识别
/// </summary>
/// <param name="base64"></param>
/// <param name="ext">扩展名</param>
/// <param name="path">存放路径</param>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public SimApiUploadInfo SaveFile(string base64, string ext = null, string path = null, string fileName = null)
{
byte[] bt;
var filePath = FilePath + path;
if (fileName == null)
{
fileName = Guid.NewGuid().ToString();
}
var baseArr = base64.Split(";");
if (baseArr.Length == 2)
{
var info = baseArr[0].Split(":")[1].Split("/");
if (path == null)
{
filePath += $"{info[0]}/";
}
if (ext == null)
{
ext = info[1];
}
var data = baseArr[1].Split(",");
bt = Convert.FromBase64String(data[1]);
}
else
{
bt = Convert.FromBase64String(base64);
}
var fn = fileName + (string.IsNullOrEmpty(ext) ? string.Empty : $".{ext}");
return WriteFile(filePath, fn, bt);
}
/// <summary>
/// 把数据写入文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <param name="data"></param>
/// <returns></returns>
public SimApiUploadInfo WriteFile(string filePath, string fileName, byte[] data)
{
var realPath = Directory.GetCurrentDirectory() + "/wwwroot" + filePath;
if (!Directory.Exists(realPath))
{
Directory.CreateDirectory(realPath);
}
File.WriteAllBytes(realPath + fileName, data);
return new SimApiUploadInfo
{
Path = filePath + fileName,
Size = data.Length
};
}
}
}