67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Http;
|
||
using Microsoft.Extensions.Options;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using Ufangx.FileServices.Abstractions;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using Microsoft.Extensions.Localization;
|
||
|
||
namespace Ufangx.FileServices.Middlewares
|
||
{
|
||
public class ResumableInfoUploaderMiddleware : UploaderMiddleware
|
||
{
|
||
private IResumableInfoService service;
|
||
|
||
public IResumableInfoService Service => service ?? (service = Context.RequestServices.GetRequiredService<IResumableInfoService>());
|
||
|
||
public ResumableInfoUploaderMiddleware(RequestDelegate next,
|
||
IFileServiceProvider serviceProvider) : base(next, serviceProvider)
|
||
{
|
||
}
|
||
protected override async Task Handler(HttpContext context) {
|
||
string key = GetRequestParams("key");
|
||
IResumableInfo info = null;
|
||
if (string.IsNullOrWhiteSpace(key))
|
||
{
|
||
if (long.TryParse(GetRequestParams("fileSize"), out long fileSize)
|
||
&& int.TryParse(GetRequestParams("blobSize"), out int blobSize)
|
||
&& long.TryParse(GetRequestParams("blobCount"), out long blobCount))
|
||
{
|
||
string fileName = GetRequestParams("fileName");
|
||
if (string.IsNullOrWhiteSpace(fileName)) {
|
||
await Error(StringLocalizer["参数文件名称(fileName)是必须的"]);
|
||
return;
|
||
}
|
||
if (await ValidateResultHandler(Validate(fileName, fileSize))) {
|
||
return;
|
||
}
|
||
info = await Service.Create(await GetStoreFileName(fileName),
|
||
fileName,
|
||
fileSize,
|
||
GetRequestParams("fileType"),
|
||
blobCount,
|
||
blobSize);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
info = await Service.Get(key);
|
||
}
|
||
await WriteJsonAsync(info == null ? null : new
|
||
{
|
||
key = info.Key,
|
||
index = info.BlobIndex,
|
||
});
|
||
}
|
||
|
||
protected override string GetRequestParams(string key)
|
||
{
|
||
return Context.Request.Query[key];
|
||
}
|
||
}
|
||
}
|