mirror of
https://github.com/LBPUnion/ProjectLighthouse.git
synced 2025-09-26 11:19:07 +00:00
Fix /upload/{hash} endpoint not writing correctly
This commit is contained in:
parent
86c6ac035b
commit
f3c6d4a415
3 changed files with 25 additions and 11 deletions
|
@ -1,13 +1,13 @@
|
||||||
|
using System.Buffers;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Pipelines;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using LBPUnion.ProjectLighthouse.Helpers;
|
using LBPUnion.ProjectLighthouse.Helpers;
|
||||||
using LBPUnion.ProjectLighthouse.Serialization;
|
using LBPUnion.ProjectLighthouse.Serialization;
|
||||||
using LBPUnion.ProjectLighthouse.Types;
|
using LBPUnion.ProjectLighthouse.Types;
|
||||||
using LBPUnion.ProjectLighthouse.Types.Files;
|
using LBPUnion.ProjectLighthouse.Types.Files;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using IOFile = System.IO.File;
|
using IOFile = System.IO.File;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ namespace LBPUnion.ProjectLighthouse.Controllers {
|
||||||
FileHelper.EnsureDirectoryCreated(assetsDirectory);
|
FileHelper.EnsureDirectoryCreated(assetsDirectory);
|
||||||
if(FileHelper.ResourceExists(hash)) this.Ok(); // no reason to fail if it's already uploaded
|
if(FileHelper.ResourceExists(hash)) this.Ok(); // no reason to fail if it's already uploaded
|
||||||
|
|
||||||
LbpFile file = new(this.Request.Body);
|
LbpFile file = new(await BinaryHelper.ReadFromPipeReader(Request.BodyReader));
|
||||||
|
|
||||||
if(!FileHelper.IsFileSafe(file)) return this.UnprocessableEntity();
|
if(!FileHelper.IsFileSafe(file)) return this.UnprocessableEntity();
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Buffers;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Pipelines;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LBPUnion.ProjectLighthouse.Helpers {
|
namespace LBPUnion.ProjectLighthouse.Helpers {
|
||||||
public static class BinaryHelper {
|
public static class BinaryHelper {
|
||||||
|
@ -34,5 +37,24 @@ namespace LBPUnion.ProjectLighthouse.Helpers {
|
||||||
if(restoreOldPosition) reader.BaseStream.Position = oldPosition;
|
if(restoreOldPosition) reader.BaseStream.Position = oldPosition;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Written with reference from
|
||||||
|
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/request-response?view=aspnetcore-5.0
|
||||||
|
// Surprisingly doesn't take seconds. (67ms for a 100kb file)
|
||||||
|
public static async Task<byte[]> ReadFromPipeReader(PipeReader reader) {
|
||||||
|
List<byte> data = new();
|
||||||
|
while(true) {
|
||||||
|
ReadResult readResult = await reader.ReadAsync();
|
||||||
|
ReadOnlySequence<byte> buffer = readResult.Buffer;
|
||||||
|
|
||||||
|
if(readResult.IsCompleted && buffer.Length > 0) data.AddRange(buffer.ToArray());
|
||||||
|
|
||||||
|
reader.AdvanceTo(buffer.Start, buffer.End);
|
||||||
|
|
||||||
|
if(readResult.IsCompleted) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.ToArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,14 +8,6 @@ namespace LBPUnion.ProjectLighthouse.Types.Files {
|
||||||
this.FileType = FileHelper.DetermineFileType(this.Data);
|
this.FileType = FileHelper.DetermineFileType(this.Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LbpFile(Stream stream) {
|
|
||||||
using MemoryStream ms = new();
|
|
||||||
stream.CopyToAsync(ms);
|
|
||||||
|
|
||||||
this.Data = ms.ToArray();
|
|
||||||
this.FileType = FileHelper.DetermineFileType(this.Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The type of file.
|
/// The type of file.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue