优化本地文件上传

This commit is contained in:
不做码农 2022-03-22 22:01:47 +08:00
parent c6acbf407e
commit c23b69a883
5 changed files with 66 additions and 31 deletions

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Infrastructure.Enums
{
/// <summary>
/// 文件存储位置
/// </summary>
public enum StoreType
{
/// <summary>
/// 本地
/// </summary>
[Description("本地")]
LOCAL = 1,
/// <summary>
/// 阿里云
/// </summary>
[Description("阿里云")]
ALIYUN = 2,
/// <summary>
/// 腾讯云
/// </summary>
[Description("腾讯云")]
TENCENT = 3,
}
}

View File

@ -16,7 +16,7 @@ namespace Infrastructure
public static string GetdirPath(string path = "") public static string GetdirPath(string path = "")
{ {
DateTime date = DateTime.Now; DateTime date = DateTime.Now;
string timeDir = Path.Combine(date.ToString("yyyyMMdd"));// date.ToString("yyyyMM/dd/HH/"); string timeDir = date.ToString("yyyyMMdd");// date.ToString("yyyyMM/dd/HH/");
if (!string.IsNullOrEmpty(path)) if (!string.IsNullOrEmpty(path))
{ {
@ -28,7 +28,7 @@ namespace Infrastructure
/// <summary> /// <summary>
/// 取文件名的MD5值(16位) /// 取文件名的MD5值(16位)
/// </summary> /// </summary>
/// <param name="name">文件名,不包括扩展名</param> /// <param name="str">文件名,不包括扩展名</param>
/// <returns></returns> /// <returns></returns>
public static string HashFileName(string str = null) public static string HashFileName(string str = null)
{ {

View File

@ -110,13 +110,12 @@ namespace ZR.Admin.WebApi.Controllers
{ {
if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空");
string fileExt = Path.GetExtension(formFile.FileName); string fileExt = Path.GetExtension(formFile.FileName);
string hashFileName = FileUtil.HashFileName(Guid.NewGuid().ToString()).ToLower(); string hashFileName = FileUtil.HashFileName();
fileName = (fileName.IsEmpty() ? hashFileName : fileName) + fileExt; fileName = (fileName.IsEmpty() ? hashFileName : fileName) + fileExt;
fileDir = fileDir.IsEmpty() ? "uploads" : fileDir; fileDir = fileDir.IsEmpty() ? "uploads" : fileDir;
string filePath = FileUtil.GetdirPath(fileDir); string filePath = FileUtil.GetdirPath(fileDir);
string finalFilePath = Path.Combine(WebHostEnvironment.WebRootPath, filePath, fileName); string finalFilePath = Path.Combine(WebHostEnvironment.WebRootPath, filePath, fileName);
finalFilePath = finalFilePath.Replace("\\", "/").Replace("//", "/"); double fileSize = formFile.Length / 1024.0;
double fileSize = formFile.Length / 1024;
if (!Directory.Exists(Path.GetDirectoryName(finalFilePath))) if (!Directory.Exists(Path.GetDirectoryName(finalFilePath)))
{ {
@ -128,18 +127,10 @@ namespace ZR.Admin.WebApi.Controllers
formFile.CopyTo(stream); formFile.CopyTo(stream);
} }
string accessPath = $"{OptionsSetting.Upload.UploadUrl}/{filePath.Replace("\\", " /")}{fileName}"; string accessPath = string.Concat(OptionsSetting.Upload.UploadUrl, "/", filePath.Replace("\\", "/"), "/", fileName);
SysFile file = new() SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, accessPath, HttpContext.GetName())
{ {
AccessUrl = accessPath, StoreType = (int)Infrastructure.Enums.StoreType.LOCAL,
Create_by = HttpContext.GetName(),
FileExt = fileExt,
FileName = fileName,
FileSize = fileSize + "kb",
StoreType = 1,
FileUrl = finalFilePath,
RealName = formFile.FileName,
Create_time = DateTime.Now,
FileType = formFile.ContentType FileType = formFile.ContentType
}; };
long fileId = SysFileService.InsertFile(file); long fileId = SysFileService.InsertFile(file);
@ -183,17 +174,9 @@ namespace ZR.Admin.WebApi.Controllers
{ {
result = SysFileService.SaveFile(fileDir, formFile, fileName, ""); result = SysFileService.SaveFile(fileDir, formFile, fileName, "");
}); });
long id = SysFileService.InsertFile(new SysFile() long id = SysFileService.InsertFile(new(formFile.FileName, fileName, fileExt, fileSize + "kb", "", result.Item2, HttpContext.GetName())
{ {
AccessUrl = result.Item2, StoreType = (int)Infrastructure.Enums.StoreType.ALIYUN,
Create_by = HttpContext.GetName(),
FileExt = fileExt,
FileName = result.Item3,
FileSize = fileSize + "kb",
StoreType = 2,
StorePath = fileDir,
RealName = formFile.FileName,
Create_time = DateTime.Now,
FileType = formFile.ContentType FileType = formFile.ContentType
}); });
return SUCCESS(new return SUCCESS(new

View File

@ -70,5 +70,18 @@ namespace ZR.Model.System
/// 空值 : true /// 空值 : true
/// </summary> /// </summary>
public string AccessUrl { get; set; } public string AccessUrl { get; set; }
public SysFile() { }
public SysFile(string realName, string fileName, string ext, string fileSize, string storePath, string accessUrl,string create_by)
{
StorePath = storePath;
RealName = realName;
FileName = fileName;
FileExt = ext;
FileSize = fileSize;
AccessUrl = accessUrl;
Create_by = create_by;
Create_time = DateTime.Now;
}
} }
} }

View File

@ -113,7 +113,12 @@
<el-form-item label="文件id">{{formView.id}}</el-form-item> <el-form-item label="文件id">{{formView.id}}</el-form-item>
</el-col> </el-col>
<el-col :lg="12"> <el-col :lg="12">
<el-form-item label="扩展名">{{formView.fileExt}}</el-form-item> <el-form-item label="文件类型">{{formView.fileType}}</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item label="扩展名">
<el-tag>{{formView.fileExt}}</el-tag>
</el-form-item>
</el-col> </el-col>
<el-col :lg="12"> <el-col :lg="12">
<el-form-item label="源文件名">{{formView.realName}}</el-form-item> <el-form-item label="源文件名">{{formView.realName}}</el-form-item>
@ -130,12 +135,9 @@
<el-col :lg="12"> <el-col :lg="12">
<el-form-item label="创建人">{{formView.create_by}}</el-form-item> <el-form-item label="创建人">{{formView.create_by}}</el-form-item>
</el-col> </el-col>
<el-col :lg="24">
<el-form-item label="存储路径">{{formView.fileUrl}}</el-form-item>
</el-col>
<el-col :lg="24" v-if="['.png','.jpg', '.jpeg'].includes(formView.fileExt)"> <el-col :lg="24" v-if="['.png','.jpg', '.jpeg'].includes(formView.fileExt)">
<el-form-item label="预览"> <el-form-item label="预览">
<el-image :src="formView.accessUrl" fit="contain"></el-image> <el-image :src="formView.accessUrl" fit="contain" style="width:100px"></el-image>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :lg="24"> <el-col :lg="24">
@ -146,6 +148,9 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :lg="24">
<el-form-item label="存储路径">{{formView.fileUrl}}</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
</el-dialog> </el-dialog>