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.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; }
/// <summary>
/// </summary>
@ -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<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)]
[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)]
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)]
[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>

View File

@ -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; }
/// <summary>
@ -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<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 ext = FileUtility.GetFileExtension(file.Title);
var destExt = FileUtility.GetFileExtension(destTitle);
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);
}
using (var fileStream = FileConverter.Exec(file, destExt, password))
{
return InsertFile(destFolderId, fileStream, destTitle, true);
return controller.InsertFile(destFolderId, fileStream, destTitle, true);
}
}