Files
IM_NEW/FileService.WebApi/Controllers/FileTask/FileTaskController.cs

83 lines
3.1 KiB
C#

using FileService.Application.UploadFileTask;
using FileService.Infrastructure;
using IM.ASPNETCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
namespace FileService.WebApi.Controllers.FileTask
{
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class FileTaskController : ControllerBase
{
private readonly UploadFileTaskService service;
public FileTaskController(UploadFileTaskService service)
{
this.service = service;
}
[HttpPost("init")]
[UnitOfWork(typeof(FileDbContext))]
public async Task<IActionResult> Init(FileTaskInitRequest request)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var res = await service.InitTaskAsync(new UploadTaskInitCommand(
UploaderId: Guid.Parse(userId),
ConversationId: request.ConversationId,
ChatType: request.ChatType,
TargetId: request.TargetId,
FileName: request.FileName,
FileSize: request.FileSize,
contentType: request.ContentType,
checkSum: request.CheckSum
));
return Ok(res);
}
[HttpGet("progress")]
public async Task<IActionResult> Progress(string sessionId)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var res = await service.GetProgressAsync(sessionId, Guid.Parse(userId));
return Ok(res);
}
[HttpGet("status")]
public async Task<IActionResult> Status(Guid taskId)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
return Ok(await service.GetStatusAsync(taskId, Guid.Parse(userId)));
}
[HttpGet("Getuploadurl")]
public async Task<IActionResult> GetUploadUrl(string sessionId, int partNum)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var res = await service.GenerateUrlAsync(sessionId, partNum, Guid.Parse(userId));
return Ok(res);
}
[HttpPost("complete")]
[UnitOfWork(typeof(FileDbContext))]
public async Task<IActionResult> Complete([FromBody] CompleteTaskRequest request)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var res = await service.CompleteTaskAsync(new UploadTaskCompleteCommand(request.SessionId, Guid.Parse(userId), request.Parts));
return res.Succeeded ? Accepted(res) : Ok(res);
}
[HttpPost("local/parts/upload")]
public async Task<IActionResult> LocalUpload([FromForm] string sessionId, [FromForm] int partNumber, IFormFile file)
{
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
await using var stream = file.OpenReadStream();
var res = await service.UploadPartAsync(new UploadPartCommand(stream, sessionId, partNumber, file.Length), Guid.Parse(userId));
return Ok(res);
}
}
}