api: fix s3 multipart upload (#22)

* api: fix s3 multipart upload use external s3 url

* api: fix s3 multipart upload use external s3 url

* api: fix CompleteMultipartUploadRequest can not deserialize

* api: start multipart upload use s3 internal url

* Update Notesnook.API/Models/PartETagWrapper.cs

remove default constructor

Co-authored-by: Abdullah Atta <thecodrr@protonmail.com>

* api: remove default constructor

Co-authored-by: Abdullah Atta <thecodrr@protonmail.com>

* api: merge method call

Co-authored-by: Abdullah Atta <thecodrr@protonmail.com>

* api: revocation due to conflict

* api: revocation due to conflict

---------

Co-authored-by: Abdullah Atta <thecodrr@protonmail.com>
This commit is contained in:
dyw770
2025-08-18 16:33:49 +08:00
committed by GitHub
parent 037bf4c3ea
commit 30d5394425
3 changed files with 165 additions and 127 deletions

View File

@@ -24,6 +24,7 @@ using System.Threading.Tasks;
using System.Security.Claims;
using Notesnook.API.Interfaces;
using System;
using Notesnook.API.Models;
namespace Notesnook.API.Controllers
{
@@ -77,12 +78,12 @@ namespace Notesnook.API.Controllers
[HttpPost("multipart")]
[Authorize("Pro")]
public async Task<IActionResult> CompleteMultipartUpload([FromBody] CompleteMultipartUploadRequest uploadRequest)
public async Task<IActionResult> CompleteMultipartUpload([FromBody] CompleteMultipartUploadRequestWrapper uploadRequestWrapper)
{
var userId = this.User.FindFirstValue("sub");
try
{
await S3Service.CompleteMultipartUploadAsync(userId, uploadRequest);
await S3Service.CompleteMultipartUploadAsync(userId, uploadRequestWrapper.ToRequest());
return Ok();
}
catch (Exception ex) { return BadRequest(ex.Message); }

View File

@@ -0,0 +1,30 @@
using System.Collections.Generic;
using Amazon.S3.Model;
namespace Notesnook.API.Models;
public class CompleteMultipartUploadRequestWrapper
{
public string Key { get; set; }
public List<PartETagWrapper> PartETags { get; set; }
public string UploadId { get; set; }
public CompleteMultipartUploadRequest ToRequest()
{
CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest();
completeMultipartUploadRequest.Key = Key;
completeMultipartUploadRequest.UploadId = UploadId;
completeMultipartUploadRequest.PartETags = [];
foreach (var partETagWrapper in PartETags)
{
var partETag = new PartETag
{
PartNumber = partETagWrapper.PartNumber,
ETag = partETagWrapper.ETag
};
completeMultipartUploadRequest.PartETags.Add(partETag);
}
return completeMultipartUploadRequest;
}
}

View File

@@ -0,0 +1,7 @@
namespace Notesnook.API.Models;
public class PartETagWrapper
{
public int PartNumber { get; set; }
public string ETag { get; set; }
}