Browse Source

fix(oss): fixed the problem that each fragment occupies the number of uploads

pull/330/head
cKey 4 years ago
parent
commit
3afc8dbc1d
  1. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileAppService.cs
  2. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs
  3. 41
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs
  4. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs
  5. 22
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs
  6. 82
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs
  7. 100
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs
  8. 52
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs
  9. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs
  10. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs
  11. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs
  12. 100
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs
  13. 19
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs
  14. 20
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs
  15. 90
      aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/Program.cs

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileAppService.cs

@ -6,8 +6,10 @@ namespace LINGYUN.Abp.OssManagement
{
public interface IFileAppService : IApplicationService
{
Task<OssObjectDto> UploadAsync(UploadPublicFileInput input);
Task<OssObjectDto> UploadAsync(UploadFileInput input);
Task<Stream> GetAsync(GetPublicFileInput input);
Task UploadAsync(UploadFileChunkInput input);
}
}

10
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs

@ -0,0 +1,10 @@
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.OssManagement
{
public interface IFileUploader
{
Task UploadAsync(UploadFileChunkInput input, CancellationToken cancellationToken = default);
}
}

41
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs

@ -0,0 +1,41 @@
using System.ComponentModel.DataAnnotations;
using System.IO;
using Volo.Abp.Auditing;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
public class UploadFileChunkInput : UploadFile
{
public string Bucket { get; set; }
public string Path { get; set; }
#region 配合Uplaoder 分块传输
/// <summary>
/// 常规块大小
/// </summary>
[Required]
public long ChunkSize { get; set; }
/// <summary>
/// 当前块大小
/// </summary>
[Required]
public long CurrentChunkSize { get; set; }
/// <summary>
/// 当前上传中块的索引
/// </summary>
[Required]
public int ChunkNumber { get; set; }
/// <summary>
/// 块总数
/// </summary>
[Required]
public int TotalChunks { get; set; }
#endregion
[DisableAuditing]
[DisableValidation]
public Stream Content { get; set; }
}
}

2
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadPublicFileInput.cs → aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs

@ -5,7 +5,7 @@ using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
public class UploadPublicFileInput
public class UploadFileInput
{
public string Path { get; set; }
public string Object { get; set; }

22
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs

@ -10,23 +10,43 @@ namespace LINGYUN.Abp.OssManagement
{
public abstract class FileAppServiceBase : OssManagementApplicationServiceBase, IFileAppService
{
private readonly IFileUploader _fileUploader;
private readonly IFileValidater _fileValidater;
private readonly IOssContainerFactory _ossContainerFactory;
protected FileAppServiceBase(
IFileUploader fileUploader,
IFileValidater fileValidater,
IOssContainerFactory ossContainerFactory)
{
_fileUploader = fileUploader;
_fileValidater = fileValidater;
_ossContainerFactory = ossContainerFactory;
}
public virtual async Task UploadAsync(UploadFileChunkInput input)
{
await _fileUploader.UploadAsync(
new UploadFileChunkInput
{
Bucket = GetCurrentBucket(),
Content = input.Content,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Path = GetCurrentPath(HttpUtility.UrlDecode(input.Path))
});
}
[RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)]
[RequiresLimitFeature(
AbpOssManagementFeatureNames.OssObject.UploadLimit,
AbpOssManagementFeatureNames.OssObject.UploadInterval,
LimitPolicy.Month)]
public virtual async Task<OssObjectDto> UploadAsync(UploadPublicFileInput input)
public virtual async Task<OssObjectDto> UploadAsync(UploadFileInput input)
{
await _fileValidater.ValidationAsync(new UploadFile
{

82
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs

@ -0,0 +1,82 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.OssManagement.Features;
using LINGYUN.Abp.OssManagement.Localization;
using Microsoft.Extensions.Localization;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
public class FileUploadMerger : ITransientDependency
{
private readonly IFileValidater _fileValidater;
private readonly IOssContainerFactory _ossContainerFactory;
private readonly IStringLocalizer _stringLocalizer;
public FileUploadMerger(
IFileValidater fileValidater,
IOssContainerFactory ossContainerFactory,
IStringLocalizer<AbpOssManagementResource> stringLocalizer)
{
_fileValidater = fileValidater;
_ossContainerFactory = ossContainerFactory;
_stringLocalizer = stringLocalizer;
}
/// <summary>
/// 合并文件
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)]
[RequiresLimitFeature(
AbpOssManagementFeatureNames.OssObject.UploadLimit,
AbpOssManagementFeatureNames.OssObject.UploadInterval,
LimitPolicy.Month)]
public virtual async Task<OssObject> MergeAsync(CreateOssObjectInput input)
{
if (input.Content.IsNullOrEmpty())
{
ThrowValidationException(_stringLocalizer["FileNotBeNullOrEmpty"], "File");
}
await _fileValidater.ValidationAsync(new UploadFile
{
TotalSize = input.Content.Length,
FileName = input.Object
});
var oss = CreateOssContainer();
var createOssObjectRequest = new CreateOssObjectRequest(
input.Bucket,
input.Object,
input.Content,
input.Path,
input.ExpirationTime)
{
Overwrite = input.Overwrite
};
return await oss.CreateObjectAsync(createOssObjectRequest);
}
protected virtual IOssContainer CreateOssContainer()
{
return _ossContainerFactory.Create();
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
{
new ValidationResult(message, new[] {memberName})
});
}
}
}

100
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs

@ -0,0 +1,100 @@
using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
namespace LINGYUN.Abp.OssManagement
{
public class FileUploader : IFileUploader, ITransientDependency
{
private readonly IFileValidater _fileValidater;
private readonly FileUploadMerger _fileUploadMerger;
public FileUploader(
IFileValidater fileValidater,
FileUploadMerger fileUploadMerger)
{
_fileValidater = fileValidater;
_fileUploadMerger = fileUploadMerger;
}
public virtual async Task UploadAsync(UploadFileChunkInput input, CancellationToken cancellationToken = default)
{
await _fileValidater.ValidationAsync(input);
// 以上传的文件名创建一个临时目录
var tempFilePath = Path.Combine(
Path.GetTempPath(),
"lingyun-abp-application",
"oss-upload-tmp",
string.Concat(input.Path ?? "", input.FileName).ToMd5());
try
{
// 重新开始
if (input.ChunkNumber == 1)
{
DirectoryHelper.DeleteIfExists(tempFilePath);
}
DirectoryHelper.CreateIfNotExists(tempFilePath);
if (cancellationToken.IsCancellationRequested)
{
// 如果取消请求,删除临时目录
Directory.Delete(tempFilePath, true);
return;
}
// 以上传的分片索引创建临时文件
var tempSavedFile = Path.Combine(tempFilePath, $"{input.ChunkNumber}.upd");
if (input.Content != null)
{
// 保存临时文件
using var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write);
// 写入当前分片文件
await input.Content.CopyToAsync(fs);
}
if (input.ChunkNumber == input.TotalChunks)
{
var createOssObjectInput = new CreateOssObjectInput
{
Bucket = input.Bucket,
Path = input.Path,
Object = input.FileName
};
// 合并文件
var mergeSavedFile = Path.Combine(tempFilePath, $"{input.FileName}");
// 获取并排序所有分片文件
var mergeFiles = Directory.GetFiles(tempFilePath).OrderBy(f => f.Length).ThenBy(f => f);
// 创建临时合并文件
using var memoryStream = new MemoryStream();
foreach (var mergeFile in mergeFiles)
{
// 读取当前文件字节
var mergeFileBytes = await FileHelper.ReadAllBytesAsync(mergeFile);
// 写入到合并文件流
await memoryStream.WriteAsync(mergeFileBytes, 0, mergeFileBytes.Length, cancellationToken);
Array.Clear(mergeFileBytes, 0, mergeFileBytes.Length);
// 删除已参与合并的临时文件分片
FileHelper.DeleteIfExists(mergeFile);
}
createOssObjectInput.SetContent(memoryStream);
// 分离出合并接口,合并时计算上传次数
await _fileUploadMerger.MergeAsync(createOssObjectInput);
// 文件保存之后删除临时文件目录
Directory.Delete(tempFilePath, true);
}
}
catch
{
// 发生异常删除临时文件目录
Directory.Delete(tempFilePath, true);
throw;
}
}
}
}

52
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs

@ -1,60 +1,27 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.OssManagement.Features;
using LINGYUN.Abp.OssManagement.Permissions;
using LINGYUN.Abp.OssManagement.Permissions;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.Features;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
[Authorize(AbpOssManagementPermissions.OssObject.Default)]
public class OssObjectAppService : OssManagementApplicationServiceBase, IOssObjectAppService
{
protected IFileValidater FileValidater { get; }
protected FileUploadMerger Merger { get; }
protected IOssContainerFactory OssContainerFactory { get; }
public OssObjectAppService(
IFileValidater fileValidater,
FileUploadMerger merger,
IOssContainerFactory ossContainerFactory)
{
FileValidater = fileValidater;
Merger = merger;
OssContainerFactory = ossContainerFactory;
}
[Authorize(AbpOssManagementPermissions.OssObject.Create)]
[RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)]
[RequiresLimitFeature(
AbpOssManagementFeatureNames.OssObject.UploadLimit,
AbpOssManagementFeatureNames.OssObject.UploadInterval,
LimitPolicy.Month)]
public virtual async Task<OssObjectDto> CreateAsync(CreateOssObjectInput input)
{
if (!input.Content.IsNullOrEmpty())
{
await FileValidater.ValidationAsync(new UploadFile
{
TotalSize = input.Content.Length,
FileName = input.Object
});
}
var oss = CreateOssContainer();
var createOssObjectRequest = new CreateOssObjectRequest(
input.Bucket,
input.Object,
input.Content,
input.Path,
input.ExpirationTime)
{
Overwrite = input.Overwrite
};
var ossObject = await oss.CreateObjectAsync(createOssObjectRequest);
var ossObject = await Merger.MergeAsync(input);
return ObjectMapper.Map<OssObject, OssObjectDto>(ossObject);
}
@ -88,14 +55,5 @@ namespace LINGYUN.Abp.OssManagement
{
return OssContainerFactory.Create();
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
{
new ValidationResult(message, new[] {memberName})
});
}
}
}

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs

@ -14,11 +14,13 @@ namespace LINGYUN.Abp.OssManagement
public class PrivateFileAppService : FileAppServiceBase, IPrivateFileAppService
{
public PrivateFileAppService(
IFileUploader fileUploader,
IFileValidater fileValidater,
IOssContainerFactory ossContainerFactory)
: base(fileValidater, ossContainerFactory)
: base(fileUploader, fileValidater, ossContainerFactory)
{
}
protected override string GetCurrentBucket()
{
return "users";

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs

@ -3,11 +3,13 @@
public class PublicFileAppService : FileAppServiceBase, IPublicFileAppService
{
public PublicFileAppService(
IFileValidater fileValidater,
IOssContainerFactory ossContainerFactory)
: base(fileValidater, ossContainerFactory)
IFileUploader fileUploader,
IFileValidater fileValidater,
IOssContainerFactory ossContainerFactory)
: base(fileUploader, fileValidater, ossContainerFactory)
{
}
protected override string GetCurrentBucket()
{
return "public";

2
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

@ -109,7 +109,6 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
{
ThrowOfPathHasTooLong(filePath);
FileMode fileMode = request.Overwrite ? FileMode.Create : FileMode.CreateNew;
if (!request.Overwrite && File.Exists(filePath))
{
throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists);
@ -118,6 +117,7 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
DirectoryHelper.CreateIfNotExists(Path.GetDirectoryName(filePath));
FileMode fileMode = request.Overwrite ? FileMode.Create : FileMode.CreateNew;
using (var fileStream = File.Open(filePath, fileMode, FileAccess.Write))
{
await request.Content.CopyToAsync(fileStream);

100
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs

@ -1,17 +1,10 @@
using LINGYUN.Abp.OssManagement.Permissions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Auditing;
using Volo.Abp.IO;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.OssManagement
{
@ -20,14 +13,14 @@ namespace LINGYUN.Abp.OssManagement
[Route("api/oss-management/objects")]
public class OssObjectController : AbpController, IOssObjectAppService
{
protected IFileValidater FileValidater { get; }
protected IFileUploader FileUploader { get; }
protected IOssObjectAppService OssObjectAppService { get; }
public OssObjectController(
IFileValidater fileValidater,
IFileUploader fileUploader,
IOssObjectAppService ossObjectAppService)
{
FileValidater = fileValidater;
FileUploader = fileUploader;
OssObjectAppService = ossObjectAppService;
}
@ -43,74 +36,18 @@ namespace LINGYUN.Abp.OssManagement
[Authorize(AbpOssManagementPermissions.OssObject.Create)]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
{
await FileValidater.ValidationAsync(input);
// 以上传的文件名创建一个临时目录
var tempFilePath = Path.Combine(
Path.GetTempPath(),
"lingyun-abp-application",
"upload-tmp",
string.Concat(input.Path ?? "", input.FileName).ToMd5());
DirectoryHelper.CreateIfNotExists(tempFilePath);
// 以上传的分片索引创建临时文件
var tempSavedFile = Path.Combine(tempFilePath, $"{input.ChunkNumber}.uploadtmp");
try
await FileUploader.UploadAsync(new UploadFileChunkInput
{
if (HttpContext.RequestAborted.IsCancellationRequested)
{
// 如果取消请求,删除临时目录
Directory.Delete(tempFilePath, true);
return;
}
if (input.File != null)
{
// 保存临时文件
using (var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write))
{
// 写入当前分片文件
await input.File.CopyToAsync(fs);
}
}
if (input.ChunkNumber == input.TotalChunks)
{
var createOssObjectInput = new CreateOssObjectInput
{
Bucket = input.Bucket,
Path = input.Path,
Object = input.FileName
};
// 合并文件
var mergeSavedFile = Path.Combine(tempFilePath, $"{input.FileName}");
// 获取并排序所有分片文件
var mergeFiles = Directory.GetFiles(tempFilePath).OrderBy(f => f.Length).ThenBy(f => f);
// 创建临时合并文件
using (var memoryStream = new MemoryStream())
{
foreach (var mergeFile in mergeFiles)
{
// 读取当前文件字节
var mergeFileBytes = await FileHelper.ReadAllBytesAsync(mergeFile);
// 写入到合并文件流
await memoryStream.WriteAsync(mergeFileBytes, HttpContext.RequestAborted);
Array.Clear(mergeFileBytes, 0, mergeFileBytes.Length);
// 删除已参与合并的临时文件分片
FileHelper.DeleteIfExists(mergeFile);
}
createOssObjectInput.SetContent(memoryStream);
await OssObjectAppService.CreateAsync(createOssObjectInput);
// 文件保存之后删除临时文件目录
Directory.Delete(tempFilePath, true);
}
}
}
catch
{
// 发生异常删除临时文件目录
Directory.Delete(tempFilePath, true);
throw;
}
Path = input.Path,
Bucket = input.Bucket,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
}, HttpContext.RequestAborted);
}
[HttpDelete]
@ -131,14 +68,5 @@ namespace LINGYUN.Abp.OssManagement
{
return await OssObjectAppService.GetAsync(input);
}
private static void ThrowValidationException(string message, string memberName)
{
throw new AbpValidationException(message,
new List<ValidationResult>
{
new ValidationResult(message, new[] {memberName})
});
}
}
}

19
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs

@ -27,6 +27,23 @@ namespace LINGYUN.Abp.OssManagement
LocalizationResource = typeof(AbpOssManagementResource);
}
[HttpPost]
[Route("upload")]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
{
await _privateFileAppService.UploadAsync(new UploadFileChunkInput
{
Path = input.Path,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
});
}
[HttpPost]
[Route("{path}")]
[Route("{path}/{name}")]
@ -40,7 +57,7 @@ namespace LINGYUN.Abp.OssManagement
var file = Request.Form.Files[0];
var fileName = name ?? file.FileName;
var createOssObjectInput = new UploadPublicFileInput
var createOssObjectInput = new UploadFileInput
{
Path = path,
Object = fileName,

20
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs

@ -27,6 +27,24 @@ namespace LINGYUN.Abp.OssManagement
LocalizationResource = typeof(AbpOssManagementResource);
}
[HttpPost]
[Route("upload")]
public virtual async Task UploadAsync([FromForm] UploadOssObjectInput input)
{
await _publicFileAppService.UploadAsync(new UploadFileChunkInput
{
Path = input.Path,
FileName = input.FileName,
TotalSize = input.TotalSize,
ChunkSize = input.ChunkSize,
ChunkNumber = input.ChunkNumber,
TotalChunks = input.TotalChunks,
CurrentChunkSize = input.CurrentChunkSize,
Content = input.File?.OpenReadStream(),
});
}
[HttpPost]
[Route("{path}")]
[Route("{path}/{name}")]
@ -40,7 +58,7 @@ namespace LINGYUN.Abp.OssManagement
var file = Request.Form.Files[0];
var fileName = name ?? file.FileName;
var createOssObjectInput = new UploadPublicFileInput
var createOssObjectInput = new UploadFileInput
{
Path = path,
Object = fileName,

90
aspnet-core/services/platform/LINGYUN.Platform.HttpApi.Host/Program.cs

@ -1,45 +1,45 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using System;
using System.IO;
namespace LINGYUN.Platform
{
public class Program
{
public static int Main(string[] args)
{
try
{
var hostBuilder = CreateHostBuilder(args).Build();
Log.Information("Starting Platform.Host.");
hostBuilder.Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly!");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
internal static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog((context, provider, config) =>
{
config.ReadFrom.Configuration(context.Configuration);
})
.UseAutofac();
}
}
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using System;
using System.IO;
namespace LINGYUN.Platform
{
public class Program
{
public static int Main(string[] args)
{
try
{
var hostBuilder = CreateHostBuilder(args).Build();
Log.Information("Starting Platform.Host.");
hostBuilder.Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly!");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
internal static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog((context, provider, config) =>
{
config.ReadFrom.Configuration(context.Configuration);
})
.UseAutofac();
}
}

Loading…
Cancel
Save