From 464be4fceb1237078e3e1eb2a0844e6c4af8717c Mon Sep 17 00:00:00 2001 From: Kengwang Date: Mon, 17 Nov 2025 15:44:44 +0800 Subject: [PATCH 1/2] [Core] Fix upload_private_file Fix #70 --- .../Internal/Events/System/FileUploadEvent.cs | 4 +++- .../Internal/Logic/OperationLogic.cs | 19 +++++++++++-------- .../Services/System/FileUploadService.cs | 8 +------- Lagrange.Core/Message/MessagePacker.cs | 2 +- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Lagrange.Core/Internal/Events/System/FileUploadEvent.cs b/Lagrange.Core/Internal/Events/System/FileUploadEvent.cs index 86aa7814..19ce9b37 100644 --- a/Lagrange.Core/Internal/Events/System/FileUploadEvent.cs +++ b/Lagrange.Core/Internal/Events/System/FileUploadEvent.cs @@ -2,7 +2,7 @@ namespace Lagrange.Core.Internal.Events.System; -internal class FileUploadEventReq(string targetUid, Stream fileStream, string fileName) : ProtocolEvent +internal class FileUploadEventReq(string targetUid, Stream fileStream, string fileName, byte[] md510m) : ProtocolEvent { public string TargetUid { get; } = targetUid; @@ -12,6 +12,8 @@ internal class FileUploadEventReq(string targetUid, Stream fileStream, string fi public byte[] FileMd5 { get; } = fileStream.Md5(); + public byte[] File10MMd5 { get; } = md510m; + public byte[] FileSha1 { get; } = fileStream.Sha1(); } diff --git a/Lagrange.Core/Internal/Logic/OperationLogic.cs b/Lagrange.Core/Internal/Logic/OperationLogic.cs index bf86f1e5..8a38c135 100644 --- a/Lagrange.Core/Internal/Logic/OperationLogic.cs +++ b/Lagrange.Core/Internal/Logic/OperationLogic.cs @@ -88,14 +88,17 @@ public async Task GroupFSDownload(long groupUin, string fileId) fileName = ResolveFileName(fileStream, fileName); var friend = await context.CacheContext.ResolveFriend(targetUin) ?? throw new InvalidTargetException(targetUin); - var request = new FileUploadEventReq(friend.Uid, fileStream, fileName); - var result = await context.EventContext.SendEvent(request); - - var buffer = ArrayPool.Shared.Rent(10 * 1024 * 1024); - int payload = await fileStream.ReadAsync(buffer.AsMemory(0, 10 * 1024 * 1024)); + + var buffer = ArrayPool.Shared.Rent(10002432); + int payload = await fileStream.ReadAsync(buffer.AsMemory(0, 10002432)); var md510m = MD5.HashData(buffer[..payload]); ArrayPool.Shared.Return(buffer); - request.FileStream.Seek(0, SeekOrigin.Begin); + fileStream.Seek(0, SeekOrigin.Begin); + + var request = new FileUploadEventReq(friend.Uid, fileStream, fileName, md510m); + var result = await context.EventContext.SendEvent(request); + + if (!result.IsExist) { @@ -176,8 +179,8 @@ public async Task SendGroupFile(long groupUin, Stream fileStream, string var request = new GroupFSUploadEventReq(groupUin, fileName, fileStream, parentDirectory, md5); var uploadResp = await context.EventContext.SendEvent(request); - var buffer = ArrayPool.Shared.Rent(10 * 1024 * 1024); - int payload = await fileStream.ReadAsync(buffer.AsMemory(0, 10 * 1024 * 1024)); + var buffer = ArrayPool.Shared.Rent(10002432); + int payload = await fileStream.ReadAsync(buffer.AsMemory(0, 10002432)); var md510m = MD5.HashData(buffer[..payload]); ArrayPool.Shared.Return(buffer); fileStream.Seek(0, SeekOrigin.Begin); diff --git a/Lagrange.Core/Internal/Services/System/FileUploadService.cs b/Lagrange.Core/Internal/Services/System/FileUploadService.cs index 534346b8..abfff9ad 100644 --- a/Lagrange.Core/Internal/Services/System/FileUploadService.cs +++ b/Lagrange.Core/Internal/Services/System/FileUploadService.cs @@ -19,12 +19,6 @@ internal class FileUploadService : OidbService ProcessRequest(FileUploadEventReq request, BotContext context) { - var buffer = ArrayPool.Shared.Rent(10 * 1024 * 1024); - int payload = request.FileStream.Read(buffer); - var md510m = MD5.HashData(buffer[..payload]); - ArrayPool.Shared.Return(buffer); - request.FileStream.Seek(0, SeekOrigin.Begin); - return Task.FromResult(new OfflineFileUploadRequest { Command = 1700, @@ -35,7 +29,7 @@ private protected override Task ProcessRequest(FileUpl ReceiverUid = request.TargetUid, FileSize = (uint)request.FileStream.Length, FileName = request.FileName, - Md510MCheckSum = md510m, + Md510MCheckSum = request.File10MMd5, Sha1CheckSum = request.FileSha1, LocalPath = "/", Md5CheckSum = request.FileMd5, diff --git a/Lagrange.Core/Message/MessagePacker.cs b/Lagrange.Core/Message/MessagePacker.cs index dc3a3691..0e53d0af 100644 --- a/Lagrange.Core/Message/MessagePacker.cs +++ b/Lagrange.Core/Message/MessagePacker.cs @@ -180,7 +180,7 @@ public static ReadOnlyMemory BuildTrans0X211(BotFriend friend, FileUploadE { FileType = 0, FileUuid = resp.FileId, - FileMd5 = req.FileMd5, + FileMd5 = req.File10MMd5, FileName = req.FileName, FileSize = (ulong)req.FileStream.Length, SubCmd = 1, From 39a14fa0362a88eb3c79af512cb342550d04078d Mon Sep 17 00:00:00 2001 From: Wei FeiYang Date: Mon, 17 Nov 2025 16:55:55 +0800 Subject: [PATCH 2/2] Remove consecutive blank lines Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Lagrange.Core/Internal/Logic/OperationLogic.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Lagrange.Core/Internal/Logic/OperationLogic.cs b/Lagrange.Core/Internal/Logic/OperationLogic.cs index 8a38c135..e357f24e 100644 --- a/Lagrange.Core/Internal/Logic/OperationLogic.cs +++ b/Lagrange.Core/Internal/Logic/OperationLogic.cs @@ -99,7 +99,6 @@ public async Task GroupFSDownload(long groupUin, string fileId) var result = await context.EventContext.SendEvent(request); - if (!result.IsExist) { var ext = new FileUploadExt