From 101bd05ec7fd385b9f461fa143f9372a2bccbc20 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Fri, 28 Jan 2022 17:42:11 +0300 Subject: [PATCH] fix bug --- .../Server/Controllers/FilesController.cs | 37 ++++++++++++++----- .../Server/Helpers/FilesControllerHelper.cs | 14 +++++-- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index f05b2c162f..af39983704 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -61,6 +61,7 @@ using ASC.Web.Studio.Utility; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json.Linq; @@ -99,6 +100,7 @@ namespace ASC.Api.Documents private TenantManager TenantManager { get; } private FileUtility FileUtility { get; } private FileConverter FileConverter { get; } + private IServiceProvider ServiceProvider { get; } /// /// @@ -128,7 +130,8 @@ namespace ASC.Api.Documents TenantManager tenantManager, FileUtility fileUtility, ConsumerFactory consumerFactory, - FileConverter fileConverter) + FileConverter fileConverter, + IServiceProvider serviceProvider) { FilesControllerHelperString = filesControllerHelperString; FilesControllerHelperInt = filesControllerHelperInt; @@ -154,6 +157,7 @@ namespace ASC.Api.Documents TenantManager = tenantManager; FileUtility = fileUtility; FileConverter = fileConverter; + ServiceProvider = serviceProvider; } [Read("info")] @@ -1119,29 +1123,44 @@ namespace ASC.Api.Documents } [Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)] - public FileWrapper CopyFileAsFromBody(int fileId, [FromBody] CopyAsModel model) + public object CopyFileAsFromBody(int fileId, [FromBody] CopyAsModel model) { - return FilesControllerHelperInt.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); + return CopyFile(fileId, model); } [Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)] [Consumes("application/x-www-form-urlencoded")] - public FileWrapper CopyFileAsFromForm(int fileId, [FromForm] CopyAsModel model) + public object CopyFileAsFromForm(int fileId, [FromForm] CopyAsModel model) { - return FilesControllerHelperInt.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); + return CopyFile(fileId, model); } [Create("file/{fileId}/copyas", order: int.MaxValue)] - public FileWrapper CopyFileAsFromBody(string fileId, [FromBody] CopyAsModel model) + public object CopyFileAsFromBody(string fileId, [FromBody] CopyAsModel model) { - return FilesControllerHelperString.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); + return CopyFile(fileId, model); } [Create("file/{fileId}/copyas", order: int.MaxValue)] [Consumes("application/x-www-form-urlencoded")] - public FileWrapper CopyFileAsFromForm(string fileId, [FromBody] CopyAsModel model) + public object CopyFileAsFromForm(string fileId, [FromForm] CopyAsModel model) { - return FilesControllerHelperString.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); + return CopyFile(fileId, model); + } + + private object CopyFile(T fileId, CopyAsModel model) + { + var helper = ServiceProvider.GetService>(); + if (model.DestFolderId.ValueKind == JsonValueKind.Number) + { + return helper.CopyFileAs(fileId, model.DestFolderId.GetInt32(), model.DestTitle, model.Password); + } + else if (model.DestFolderId.ValueKind == JsonValueKind.String) + { + return helper.CopyFileAs(fileId, model.DestFolderId.GetString(), model.DestTitle, model.Password); + } + + return null; } /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index 7195ba4424..d615cc1122 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -30,6 +30,7 @@ using ASC.Web.Files.Utils; using ASC.Web.Studio.Core; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Newtonsoft.Json.Linq; @@ -70,6 +71,7 @@ namespace ASC.Files.Helpers private ApiDateTimeHelper ApiDateTimeHelper { get; } private UserManager UserManager { get; } private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + public IServiceProvider ServiceProvider { get; } private ILog Logger { get; set; } /// @@ -101,7 +103,8 @@ namespace ASC.Files.Helpers FileConverter fileConverter, ApiDateTimeHelper apiDateTimeHelper, UserManager userManager, - DisplayUserSettingsHelper displayUserSettingsHelper) + DisplayUserSettingsHelper displayUserSettingsHelper, + IServiceProvider serviceProvider) { ApiContext = context; FileStorageService = fileStorageService; @@ -125,6 +128,7 @@ namespace ASC.Files.Helpers ApiDateTimeHelper = apiDateTimeHelper; UserManager = userManager; DisplayUserSettingsHelper = displayUserSettingsHelper; + ServiceProvider = serviceProvider; HttpContextAccessor = httpContextAccessor; FileConverter = fileConverter; Logger = optionMonitor.Get("ASC.Files"); @@ -371,21 +375,23 @@ namespace ASC.Files.Helpers return FileWrapperHelper.Get(file); } - public FileWrapper CopyFileAs(T fileId, T destFolderId, string destTitle, string password = null) + public FileWrapper CopyFileAs(T fileId, TTemplate destFolderId, string destTitle, string password = null) { + var service = ServiceProvider.GetService>(); + var controller = ServiceProvider.GetService>(); var file = FileStorageService.GetFile(fileId, -1); var ext = FileUtility.GetFileExtension(file.Title); var destExt = FileUtility.GetFileExtension(destTitle); if (ext == destExt) { - var newFile = FileStorageService.CreateNewFile(new FileModel { ParentId = destFolderId, Title = destTitle, TemplateId = fileId }, false); + var newFile = service.CreateNewFile(new FileModel { ParentId = destFolderId, Title = destTitle, TemplateId = fileId }, false); return FileWrapperHelper.Get(newFile); } using (var fileStream = FileConverter.Exec(file, destExt, password)) { - return InsertFile(destFolderId, fileStream, destTitle, true); + return controller.InsertFile(destFolderId, fileStream, destTitle, true); } }