83 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|