using System.IO.Compression;
|
|
namespace DocumentFile.Service
|
{
|
public interface IUploadService
|
{
|
Task<ReturnMsg> HandleUploadWordFile(IFormFile iFormFile,string code,string name);
|
|
//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,string name, 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
|
{
|
string path;
|
if (string.IsNullOrEmpty(name))
|
{
|
//服务器命名
|
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;
|
}
|
else
|
{
|
//本地上传命名
|
path = name;
|
string baseDirectory = Path.GetDirectoryName(this._webRootPath + name);
|
if (!Directory.Exists(baseDirectory))
|
{
|
Directory.CreateDirectory(baseDirectory);
|
}
|
}
|
|
// 创建新文件
|
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,string name)
|
=> await this.HandleUploadFile(iFormFile,code, "Word",name, ".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);
|
//}
|
|
}
|
}
|