using System.IO.Compression;
|
|
namespace DocumentFile.Service
|
{
|
public interface IUploadService
|
{
|
Task<ReturnMsg> HandleUploadWordFile(IFormFile iFormFile,string code);
|
|
Task<ReturnMsg> HandleUploadTemplateFile(IFormFile iFormFile, string code);
|
|
Task<ReturnMsg> HandleUploadImageFile(IFormFile iFormFile, string code);
|
|
//(string fileType, byte[] archiveData, string archiveName) DownloadFiles(string subDirectory);
|
|
}
|
|
public class UploadService : IUploadService
|
{
|
private readonly string _webRootPath;
|
|
public UploadService()
|
{
|
_webRootPath = AppDomain.CurrentDomain.BaseDirectory;
|
}
|
|
/// <summary>
|
/// 上传文件 辅助函数
|
/// </summary>
|
/// <param name="formFile"></param>
|
/// <param name="tenant">文件夹客户标识</param>
|
/// <param name="folder">文件夹分类标签</param>
|
/// <param name="format"></param>
|
/// <returns></returns>
|
protected async virtual Task<ReturnMsg> HandleUploadFile(IFormFile formFile,string tenant, string folder, params string[] format)
|
{
|
ReturnMsg msg = new ReturnMsg();
|
|
try
|
{
|
var extensionName = Path.GetExtension(formFile.FileName)?.ToLower().Trim(); //获取后缀名
|
|
if (format != null && format.Length > 0 && !format.ToList().Contains(extensionName.ToLower()))
|
{
|
msg.error = "请上传后缀名为:" + string.Join("、", format) + " 格式的文件";
|
}
|
else
|
{
|
var path = $"/uploads/{tenant}/{folder}/{DateTime.Now:yyyyMMdd}";
|
var dir = this._webRootPath + path;
|
if (!Directory.Exists(dir))
|
{
|
Directory.CreateDirectory(dir);
|
}
|
|
var filename = CreateName(path,extensionName);
|
path += "/" + filename;
|
|
// 创建新文件
|
using var fs = File.Create(this._webRootPath+ path);
|
await formFile.CopyToAsync(fs);
|
// 清空缓冲区数据
|
fs.Flush();
|
|
msg.code = 1;
|
msg.url = path;
|
}
|
}
|
catch (Exception er)
|
{
|
msg.code = -1;
|
msg.error = "上传失败";
|
NLogProvider.GetInstance().Error(er);
|
}
|
|
return msg;
|
}
|
|
/// <summary>
|
/// 生成唯一的文件名
|
/// </summary>
|
/// <param name="path"></param>
|
/// <param name="extensionName"></param>
|
/// <returns></returns>
|
private string CreateName(string path,string extensionName)
|
{
|
var filename = $"ZC_{DateTime.Now:HHmmssfff}" + extensionName;
|
if (File.Exists(path + "/" + filename))
|
{
|
return CreateName(path, extensionName);
|
}
|
else
|
{
|
return filename;
|
}
|
}
|
|
|
/// <summary>
|
/// 上传word文件
|
/// </summary>
|
/// <param name="iFormFile"></param>
|
/// <param name="format"></param>
|
/// <returns></returns>
|
public async virtual Task<ReturnMsg> HandleUploadWordFile(IFormFile iFormFile, string code)
|
=> await this.HandleUploadFile(iFormFile,code, "Instance", ".doc",".docx");
|
|
/// <summary>
|
/// 上传word模板文件
|
/// </summary>
|
/// <param name="iFormFile"></param>
|
/// <param name="format"></param>
|
/// <returns></returns>
|
public async virtual Task<ReturnMsg> HandleUploadTemplateFile(IFormFile iFormFile, string code)
|
=> await this.HandleUploadFile(iFormFile, code, "Template", ".doc", ".docx");
|
|
/// <summary>
|
/// 上传图片
|
/// </summary>
|
/// <param name="iFormFile"></param>
|
/// <param name="folder"></param>
|
/// <returns></returns>
|
public async virtual Task<ReturnMsg> HandleUploadImageFile(IFormFile iFormFile, string code)
|
=> await this.HandleUploadFile(iFormFile, code, "Photo", ".jpg", ".jpeg", ".png");
|
/*, ".gif", ".jfif"*/
|
|
///// <summary>
|
///// 下载证书文件
|
///// 打包zip
|
///// </summary>
|
///// <param name="subDirectory"></param>
|
///// <returns></returns>
|
//public (string fileType, byte[] archiveData, string archiveName) DownloadFiles(string path)
|
//{
|
// using var memoryStream = new MemoryStream();
|
// using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
|
// {
|
// files.ForEach(file =>
|
// {
|
// var theFile = archive.CreateEntry(Path.GetFileName(file));
|
// using var binaryWriter = new BinaryWriter(theFile.Open());
|
// binaryWriter.Write(File.ReadAllBytes(file));
|
// });
|
// }
|
|
// return ("application/zip", memoryStream.ToArray(), zipName);
|
//}
|
|
}
|
}
|