Merge branch 'main' of http://101.43.53.74:3000/Admin.NET/Admin.NET
This commit is contained in:
commit
949b23fb50
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
using Aliyun.OSS.Util;
|
using Aliyun.OSS.Util;
|
||||||
using OnceMi.AspNetCore.OSS;
|
using OnceMi.AspNetCore.OSS;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace Admin.NET.Core.Service;
|
namespace Admin.NET.Core.Service;
|
||||||
|
|
||||||
@ -147,28 +148,20 @@ public class SysFileService : IDynamicApiController, ITransient
|
|||||||
public async Task<IActionResult> GetPreview([FromRoute] long Id)
|
public async Task<IActionResult> GetPreview([FromRoute] long Id)
|
||||||
{
|
{
|
||||||
var file = await GetFile(new FileInput { Id = Id });
|
var file = await GetFile(new FileInput { Id = Id });
|
||||||
//var fileName = HttpUtility.UrlEncode(file.FileName, Encoding.GetEncoding("UTF-8"));
|
var contextType = GetContextType(file.Suffix);
|
||||||
|
|
||||||
if (_OSSProviderOptions.IsEnable)
|
if (_OSSProviderOptions.IsEnable)
|
||||||
{
|
{
|
||||||
var filePath = string.Concat(file.FilePath, "/", file.Id.ToString() + file.Suffix);
|
var filePath = string.Concat(file.FilePath, "/", file.Id.ToString() + file.Suffix);
|
||||||
var stream = await (await _OSSService.PresignedGetObjectAsync(file.BucketName.ToString(), filePath, 5)).GetAsStreamAsync();
|
var (stream, encoding, response) = await (await _OSSService.PresignedGetObjectAsync(file.BucketName.ToString(), filePath, 5)).GetAsStreamAsync();
|
||||||
return new FileStreamResult(stream.Stream, "application/octet-stream");
|
return new FileDownHelper().File(stream, contextType);
|
||||||
}
|
|
||||||
else if (App.Configuration["SSHProvider:IsEnable"].ToBoolean())
|
|
||||||
{
|
|
||||||
var fullPath = string.Concat(file.FilePath, "/", file.Id + file.Suffix);
|
|
||||||
using (SSHHelper helper = new SSHHelper(App.Configuration["SSHProvider:Host"],
|
|
||||||
App.Configuration["SSHProvider:Port"].ToInt(), App.Configuration["SSHProvider:Username"], App.Configuration["SSHProvider:Password"]))
|
|
||||||
{
|
|
||||||
return new FileStreamResult(helper.OpenRead(fullPath), "application/octet-stream");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var filePath = Path.Combine(file.FilePath, file.Id.ToString() + file.Suffix);
|
var filePath = Path.Combine(file.FilePath, file.Id.ToString() + file.Suffix);
|
||||||
var path = Path.Combine(App.WebHostEnvironment.WebRootPath, filePath);
|
var path = Path.Combine(App.WebHostEnvironment.WebRootPath, filePath);
|
||||||
return new FileStreamResult(new FileStream(path, FileMode.Open), "application/octet-stream");
|
var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true);
|
||||||
|
return new FileDownHelper().File(stream, contextType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,23 +406,12 @@ public class SysFileService : IDynamicApiController, ITransient
|
|||||||
var host = CommonUtil.GetLocalhost();
|
var host = CommonUtil.GetLocalhost();
|
||||||
if (!host.EndsWith('/'))
|
if (!host.EndsWith('/'))
|
||||||
host += "/";
|
host += "/";
|
||||||
newFile.Url = $"{host}{newFile.FilePath}/{newFile.Id + newFile.Suffix}";
|
newFile.Url = $"/sysFile/preview/{newFile.Id}";
|
||||||
}
|
}
|
||||||
await _sysFileRep.AsInsertable(newFile).ExecuteCommandAsync();
|
await _sysFileRep.AsInsertable(newFile).ExecuteCommandAsync();
|
||||||
return newFile;
|
return newFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// 获取Minio文件的下载或者预览地址
|
|
||||||
///// </summary>
|
|
||||||
///// <param name="bucketName">桶名</param>
|
|
||||||
///// <param name="fileName">文件名</param>
|
|
||||||
///// <returns></returns>
|
|
||||||
//private async Task<string> GetMinioPreviewFileUrl(string bucketName, string fileName)
|
|
||||||
//{
|
|
||||||
// return await _OSSService.PresignedGetObjectAsync(bucketName, fileName, 7);
|
|
||||||
//}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 上传头像 🔖
|
/// 上传头像 🔖
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -527,4 +509,42 @@ public class SysFileService : IDynamicApiController, ITransient
|
|||||||
})
|
})
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据扩展名返回 ContextType
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ext"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private string GetContextType(string ext)
|
||||||
|
{
|
||||||
|
return ext switch
|
||||||
|
{
|
||||||
|
".js" => "application/x-javascript",
|
||||||
|
".css" => "text/css",
|
||||||
|
".asp" => "text/asp",
|
||||||
|
".htm" or ".html" or ".php" => "text/html",
|
||||||
|
".cgi" => "text/cgi",
|
||||||
|
".aspx" => "text/aspx",
|
||||||
|
".jfif" => "image/jpeg",
|
||||||
|
".jpg" => "image/jpeg",
|
||||||
|
".webp" => "image/jpeg",
|
||||||
|
".jpeg" => "image/jpeg",
|
||||||
|
".gif" => "image/gif",
|
||||||
|
".ico" => "image/x-icon",
|
||||||
|
".png" => "image/png",
|
||||||
|
".xls" or ".xlsx" or ".apk" or ".exe" or ".zip" or ".rar" or ".doc" or ".docx" => "application/x-download",
|
||||||
|
".pdf" => "application/pdf",
|
||||||
|
".json" => "application/json",
|
||||||
|
".swf" => "application/x-shockwave-flash",
|
||||||
|
".rss" => "application/rss+xml; charset=ISO-8859-1",
|
||||||
|
".xml" => "text/xml",
|
||||||
|
//除了以上类型,都允许下载
|
||||||
|
_ => "application/octet-stream",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//为了使用 ControllBase 中的方法,需要继承自 ControllBase 的对象
|
||||||
|
internal class FileDownHelper : ControllerBase
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user