This commit is contained in:
pavelbannov 2022-01-28 17:42:11 +03:00
parent 58aec95942
commit 101bd05ec7
2 changed files with 38 additions and 13 deletions

View File

@ -61,6 +61,7 @@ using ASC.Web.Studio.Utility;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@ -99,6 +100,7 @@ namespace ASC.Api.Documents
private TenantManager TenantManager { get; } private TenantManager TenantManager { get; }
private FileUtility FileUtility { get; } private FileUtility FileUtility { get; }
private FileConverter FileConverter { get; } private FileConverter FileConverter { get; }
private IServiceProvider ServiceProvider { get; }
/// <summary> /// <summary>
/// </summary> /// </summary>
@ -128,7 +130,8 @@ namespace ASC.Api.Documents
TenantManager tenantManager, TenantManager tenantManager,
FileUtility fileUtility, FileUtility fileUtility,
ConsumerFactory consumerFactory, ConsumerFactory consumerFactory,
FileConverter fileConverter) FileConverter fileConverter,
IServiceProvider serviceProvider)
{ {
FilesControllerHelperString = filesControllerHelperString; FilesControllerHelperString = filesControllerHelperString;
FilesControllerHelperInt = filesControllerHelperInt; FilesControllerHelperInt = filesControllerHelperInt;
@ -154,6 +157,7 @@ namespace ASC.Api.Documents
TenantManager = tenantManager; TenantManager = tenantManager;
FileUtility = fileUtility; FileUtility = fileUtility;
FileConverter = fileConverter; FileConverter = fileConverter;
ServiceProvider = serviceProvider;
} }
[Read("info")] [Read("info")]
@ -1119,29 +1123,44 @@ namespace ASC.Api.Documents
} }
[Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)] [Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)]
public FileWrapper<int> CopyFileAsFromBody(int fileId, [FromBody] CopyAsModel<int> model) public object CopyFileAsFromBody(int fileId, [FromBody] CopyAsModel<JsonElement> model)
{ {
return FilesControllerHelperInt.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); return CopyFile(fileId, model);
} }
[Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)] [Create("file/{fileId:int}/copyas", order: int.MaxValue - 1)]
[Consumes("application/x-www-form-urlencoded")] [Consumes("application/x-www-form-urlencoded")]
public FileWrapper<int> CopyFileAsFromForm(int fileId, [FromForm] CopyAsModel<int> model) public object CopyFileAsFromForm(int fileId, [FromForm] CopyAsModel<JsonElement> model)
{ {
return FilesControllerHelperInt.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); return CopyFile(fileId, model);
} }
[Create("file/{fileId}/copyas", order: int.MaxValue)] [Create("file/{fileId}/copyas", order: int.MaxValue)]
public FileWrapper<string> CopyFileAsFromBody(string fileId, [FromBody] CopyAsModel<string> model) public object CopyFileAsFromBody(string fileId, [FromBody] CopyAsModel<JsonElement> model)
{ {
return FilesControllerHelperString.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); return CopyFile(fileId, model);
} }
[Create("file/{fileId}/copyas", order: int.MaxValue)] [Create("file/{fileId}/copyas", order: int.MaxValue)]
[Consumes("application/x-www-form-urlencoded")] [Consumes("application/x-www-form-urlencoded")]
public FileWrapper<string> CopyFileAsFromForm(string fileId, [FromBody] CopyAsModel<string> model) public object CopyFileAsFromForm(string fileId, [FromForm] CopyAsModel<JsonElement> model)
{ {
return FilesControllerHelperString.CopyFileAs(fileId, model.DestFolderId, model.DestTitle, model.Password); return CopyFile(fileId, model);
}
private object CopyFile<T>(T fileId, CopyAsModel<JsonElement> model)
{
var helper = ServiceProvider.GetService<FilesControllerHelper<T>>();
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;
} }
/// <summary> /// <summary>

View File

@ -30,6 +30,7 @@ using ASC.Web.Files.Utils;
using ASC.Web.Studio.Core; using ASC.Web.Studio.Core;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@ -70,6 +71,7 @@ namespace ASC.Files.Helpers
private ApiDateTimeHelper ApiDateTimeHelper { get; } private ApiDateTimeHelper ApiDateTimeHelper { get; }
private UserManager UserManager { get; } private UserManager UserManager { get; }
private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; }
public IServiceProvider ServiceProvider { get; }
private ILog Logger { get; set; } private ILog Logger { get; set; }
/// <summary> /// <summary>
@ -101,7 +103,8 @@ namespace ASC.Files.Helpers
FileConverter fileConverter, FileConverter fileConverter,
ApiDateTimeHelper apiDateTimeHelper, ApiDateTimeHelper apiDateTimeHelper,
UserManager userManager, UserManager userManager,
DisplayUserSettingsHelper displayUserSettingsHelper) DisplayUserSettingsHelper displayUserSettingsHelper,
IServiceProvider serviceProvider)
{ {
ApiContext = context; ApiContext = context;
FileStorageService = fileStorageService; FileStorageService = fileStorageService;
@ -125,6 +128,7 @@ namespace ASC.Files.Helpers
ApiDateTimeHelper = apiDateTimeHelper; ApiDateTimeHelper = apiDateTimeHelper;
UserManager = userManager; UserManager = userManager;
DisplayUserSettingsHelper = displayUserSettingsHelper; DisplayUserSettingsHelper = displayUserSettingsHelper;
ServiceProvider = serviceProvider;
HttpContextAccessor = httpContextAccessor; HttpContextAccessor = httpContextAccessor;
FileConverter = fileConverter; FileConverter = fileConverter;
Logger = optionMonitor.Get("ASC.Files"); Logger = optionMonitor.Get("ASC.Files");
@ -371,21 +375,23 @@ namespace ASC.Files.Helpers
return FileWrapperHelper.Get(file); return FileWrapperHelper.Get(file);
} }
public FileWrapper<T> CopyFileAs(T fileId, T destFolderId, string destTitle, string password = null) public FileWrapper<TTemplate> CopyFileAs<TTemplate>(T fileId, TTemplate destFolderId, string destTitle, string password = null)
{ {
var service = ServiceProvider.GetService<FileStorageService<TTemplate>>();
var controller = ServiceProvider.GetService<FilesControllerHelper<TTemplate>>();
var file = FileStorageService.GetFile(fileId, -1); var file = FileStorageService.GetFile(fileId, -1);
var ext = FileUtility.GetFileExtension(file.Title); var ext = FileUtility.GetFileExtension(file.Title);
var destExt = FileUtility.GetFileExtension(destTitle); var destExt = FileUtility.GetFileExtension(destTitle);
if (ext == destExt) if (ext == destExt)
{ {
var newFile = FileStorageService.CreateNewFile(new FileModel<T, T> { ParentId = destFolderId, Title = destTitle, TemplateId = fileId }, false); var newFile = service.CreateNewFile(new FileModel<TTemplate, T> { ParentId = destFolderId, Title = destTitle, TemplateId = fileId }, false);
return FileWrapperHelper.Get(newFile); return FileWrapperHelper.Get(newFile);
} }
using (var fileStream = FileConverter.Exec(file, destExt, password)) using (var fileStream = FileConverter.Exec(file, destExt, password))
{ {
return InsertFile(destFolderId, fileStream, destTitle, true); return controller.InsertFile(destFolderId, fileStream, destTitle, true);
} }
} }