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..e357f24e 100644 --- a/Lagrange.Core/Internal/Logic/OperationLogic.cs +++ b/Lagrange.Core/Internal/Logic/OperationLogic.cs @@ -88,15 +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) { var ext = new FileUploadExt @@ -176,8 +178,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,