diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs index b44d06ff..236d0655 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs @@ -76,18 +76,22 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("上传文件Base64")] public async Task UploadFileFromBase64(UploadFileFromBase64Input input) { - byte[] fileData = Convert.FromBase64String(input.FileDataBase64); + var pattern = @"data:(?.+?);base64,(?[^""]+)"; + var regex = new Regex(pattern, RegexOptions.Compiled); + var match = regex.Match(input.FileDataBase64); + + byte[] fileData = Convert.FromBase64String(match.Groups["data"].Value); + var contentType = match.Groups["type"].Value; + if (string.IsNullOrEmpty(input.FileName)) + input.FileName = $"{YitIdHelper.NextId()}.{contentType.AsSpan(contentType.LastIndexOf('/') + 1)}"; + var ms = new MemoryStream(); ms.Write(fileData); ms.Seek(0, SeekOrigin.Begin); - if (string.IsNullOrEmpty(input.FileName)) - input.FileName = $"{YitIdHelper.NextId()}.jpg"; - if (string.IsNullOrEmpty(input.ContentType)) - input.ContentType = "image/jpg"; IFormFile formFile = new FormFile(ms, 0, fileData.Length, "file", input.FileName) { Headers = new HeaderDictionary(), - ContentType = input.ContentType + ContentType = contentType }; return await UploadFile(new FileUploadInput { File = formFile, Path = input.Path, FileType = input.FileType, IsPublic = input.IsPublic }); }