diff --git a/backend/IMTest/bin/Debug/net8.0/IMTest.dll b/backend/IMTest/bin/Debug/net8.0/IMTest.dll
index a0cda45..20b497b 100644
Binary files a/backend/IMTest/bin/Debug/net8.0/IMTest.dll and b/backend/IMTest/bin/Debug/net8.0/IMTest.dll differ
diff --git a/backend/IMTest/bin/Debug/net8.0/IMTest.pdb b/backend/IMTest/bin/Debug/net8.0/IMTest.pdb
index f9575cb..6695021 100644
Binary files a/backend/IMTest/bin/Debug/net8.0/IMTest.pdb and b/backend/IMTest/bin/Debug/net8.0/IMTest.pdb differ
diff --git a/backend/IMTest/bin/Debug/net8.0/IM_API.dll b/backend/IMTest/bin/Debug/net8.0/IM_API.dll
index a3b4ee9..ad71984 100644
Binary files a/backend/IMTest/bin/Debug/net8.0/IM_API.dll and b/backend/IMTest/bin/Debug/net8.0/IM_API.dll differ
diff --git a/backend/IMTest/bin/Debug/net8.0/IM_API.exe b/backend/IMTest/bin/Debug/net8.0/IM_API.exe
index d0ffae4..201e73a 100644
Binary files a/backend/IMTest/bin/Debug/net8.0/IM_API.exe and b/backend/IMTest/bin/Debug/net8.0/IM_API.exe differ
diff --git a/backend/IMTest/bin/Debug/net8.0/IM_API.pdb b/backend/IMTest/bin/Debug/net8.0/IM_API.pdb
index 4d12f0b..008f17a 100644
Binary files a/backend/IMTest/bin/Debug/net8.0/IM_API.pdb and b/backend/IMTest/bin/Debug/net8.0/IM_API.pdb differ
diff --git a/backend/IMTest/bin/Debug/net8.0/appsettings.json b/backend/IMTest/bin/Debug/net8.0/appsettings.json
index fc895fb..f1d60df 100644
--- a/backend/IMTest/bin/Debug/net8.0/appsettings.json
+++ b/backend/IMTest/bin/Debug/net8.0/appsettings.json
@@ -22,5 +22,9 @@
"Port": 5672,
"Username": "test",
"Password": "123456"
+ },
+ "FileUploadOptions": {
+ "DefaultStorage": "Local",
+ "ChunkSize": 10,
}
}
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfo.cs b/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfo.cs
index 2a2b83e..758c389 100644
--- a/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfo.cs
+++ b/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfo.cs
@@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("IMTest")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dc6ecf224df4e8714171e8b5d23afaa90b3a1f81")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d42956051108811cdd7be6a07af6b11e1d7f0d15")]
[assembly: System.Reflection.AssemblyProductAttribute("IMTest")]
[assembly: System.Reflection.AssemblyTitleAttribute("IMTest")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfoInputs.cache b/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfoInputs.cache
index 3735720..4919883 100644
--- a/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfoInputs.cache
+++ b/backend/IMTest/obj/Debug/net8.0/IMTest.AssemblyInfoInputs.cache
@@ -1 +1 @@
-1b9e709aa84e0b4f6260cd10cf25bfc3a30c60e75a3966fc7d4cdf489eae898b
+fa24b386648cc4dba48ae5e3f91e5303b0dfd0971bba62bc27ca1580a5064337
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.assets.cache b/backend/IMTest/obj/Debug/net8.0/IMTest.assets.cache
index b61f83e..f6caa4d 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/IMTest.assets.cache and b/backend/IMTest/obj/Debug/net8.0/IMTest.assets.cache differ
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.AssemblyReference.cache b/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.AssemblyReference.cache
index 278b1a7..30142a3 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.AssemblyReference.cache and b/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.AssemblyReference.cache differ
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.CoreCompileInputs.cache b/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.CoreCompileInputs.cache
index c05b415..d84992b 100644
--- a/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.CoreCompileInputs.cache
+++ b/backend/IMTest/obj/Debug/net8.0/IMTest.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-6e6df2b3d9fe8d3830882bef146134864f65ca58bc5ea4bac684eaec55cfd628
+b2b545acb4173028f4d41b8d8c0aea03ecbcecb4eeabe997ca466c2e265beff6
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.dll b/backend/IMTest/obj/Debug/net8.0/IMTest.dll
index a0cda45..20b497b 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/IMTest.dll and b/backend/IMTest/obj/Debug/net8.0/IMTest.dll differ
diff --git a/backend/IMTest/obj/Debug/net8.0/IMTest.pdb b/backend/IMTest/obj/Debug/net8.0/IMTest.pdb
index f9575cb..6695021 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/IMTest.pdb and b/backend/IMTest/obj/Debug/net8.0/IMTest.pdb differ
diff --git a/backend/IMTest/obj/Debug/net8.0/ref/IMTest.dll b/backend/IMTest/obj/Debug/net8.0/ref/IMTest.dll
index 9f9bfd6..5678266 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/ref/IMTest.dll and b/backend/IMTest/obj/Debug/net8.0/ref/IMTest.dll differ
diff --git a/backend/IMTest/obj/Debug/net8.0/refint/IMTest.dll b/backend/IMTest/obj/Debug/net8.0/refint/IMTest.dll
index 9f9bfd6..5678266 100644
Binary files a/backend/IMTest/obj/Debug/net8.0/refint/IMTest.dll and b/backend/IMTest/obj/Debug/net8.0/refint/IMTest.dll differ
diff --git a/backend/IMTest/obj/IMTest.csproj.nuget.dgspec.json b/backend/IMTest/obj/IMTest.csproj.nuget.dgspec.json
index 7422270..038561f 100644
--- a/backend/IMTest/obj/IMTest.csproj.nuget.dgspec.json
+++ b/backend/IMTest/obj/IMTest.csproj.nuget.dgspec.json
@@ -96,7 +96,7 @@
"privateAssets": "all"
}
},
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
}
}
},
@@ -199,6 +199,10 @@
"target": "Package",
"version": "[2.3.2, )"
},
+ "SixLabors.ImageSharp": {
+ "target": "Package",
+ "version": "[3.1.12, )"
+ },
"StackExchange.Redis": {
"target": "Package",
"version": "[2.9.32, )"
@@ -231,7 +235,7 @@
"privateAssets": "all"
}
},
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
}
}
}
diff --git a/backend/IMTest/obj/IMTest.csproj.nuget.g.props b/backend/IMTest/obj/IMTest.csproj.nuget.g.props
index a72789c..831aa67 100644
--- a/backend/IMTest/obj/IMTest.csproj.nuget.g.props
+++ b/backend/IMTest/obj/IMTest.csproj.nuget.g.props
@@ -7,7 +7,7 @@
$(UserProfile)\.nuget\packages\
C:\Users\nanxun\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
PackageReference
- 6.14.1
+ 6.14.2
diff --git a/backend/IMTest/obj/project.assets.json b/backend/IMTest/obj/project.assets.json
index 4e1d539..de30454 100644
--- a/backend/IMTest/obj/project.assets.json
+++ b/backend/IMTest/obj/project.assets.json
@@ -1679,6 +1679,22 @@
}
}
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/SixLabors.ImageSharp.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/SixLabors.ImageSharp.dll": {
+ "related": ".xml"
+ }
+ },
+ "build": {
+ "build/_._": {}
+ }
+ },
"StackExchange.Redis/2.9.32": {
"type": "package",
"dependencies": {
@@ -3027,6 +3043,7 @@
"Newtonsoft.Json": "13.0.4",
"Pomelo.EntityFrameworkCore.MySql": "8.0.3",
"RedLock.net": "2.3.2",
+ "SixLabors.ImageSharp": "3.1.12",
"StackExchange.Redis": "2.9.32",
"Swashbuckle.AspNetCore": "6.6.2",
"System.IdentityModel.Tokens.Jwt": "8.14.0"
@@ -5363,6 +5380,22 @@
"runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so"
]
},
+ "SixLabors.ImageSharp/3.1.12": {
+ "sha512": "iAg6zifihXEFS/t7fiHhZBGAdCp3FavsF4i2ZIDp0JfeYeDVzvmlbY1CNhhIKimaIzrzSi5M/NBFcWvZT2rB/A==",
+ "type": "package",
+ "path": "sixlabors.imagesharp/3.1.12",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE",
+ "build/SixLabors.ImageSharp.props",
+ "lib/net6.0/SixLabors.ImageSharp.dll",
+ "lib/net6.0/SixLabors.ImageSharp.xml",
+ "sixlabors.imagesharp.128.png",
+ "sixlabors.imagesharp.3.1.12.nupkg.sha512",
+ "sixlabors.imagesharp.nuspec"
+ ]
+ },
"StackExchange.Redis/2.9.32": {
"sha512": "j5Rjbf7gWz5izrn0UWQy9RlQY4cQDPkwJfVqATnVsOa/+zzJrps12LOgacMsDl/Vit2f01cDiDkG/Rst8v2iGw==",
"type": "package",
@@ -8962,7 +8995,7 @@
"privateAssets": "all"
}
},
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.311/PortableRuntimeIdentifierGraph.json"
}
}
}
diff --git a/backend/IMTest/obj/project.nuget.cache b/backend/IMTest/obj/project.nuget.cache
index e5a6826..0841100 100644
--- a/backend/IMTest/obj/project.nuget.cache
+++ b/backend/IMTest/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "ueA0djhC8vQ=",
+ "dgSpecHash": "E2DnflEnEuk=",
"success": true,
"projectFilePath": "C:\\Users\\nanxun\\Documents\\IM\\backend\\IMTest\\IMTest.csproj",
"expectedPackageFiles": [
@@ -97,6 +97,7 @@
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
+ "C:\\Users\\nanxun\\.nuget\\packages\\sixlabors.imagesharp\\3.1.12\\sixlabors.imagesharp.3.1.12.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\stackexchange.redis\\2.9.32\\stackexchange.redis.2.9.32.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\swashbuckle.aspnetcore\\6.6.2\\swashbuckle.aspnetcore.6.6.2.nupkg.sha512",
"C:\\Users\\nanxun\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.6.2\\swashbuckle.aspnetcore.swagger.6.6.2.nupkg.sha512",
diff --git a/backend/IM_API/.gitignore b/backend/IM_API/.gitignore
index 3e16852..8914895 100644
--- a/backend/IM_API/.gitignore
+++ b/backend/IM_API/.gitignore
@@ -1,3 +1,4 @@
bin/
obj/
-.vs/
\ No newline at end of file
+.vs/
+uploads/
\ No newline at end of file
diff --git a/backend/IM_API/Application/EventHandlers/MessageCreatedHandler/SignalREventHandler.cs b/backend/IM_API/Application/EventHandlers/MessageCreatedHandler/SignalREventHandler.cs
index 8166f2f..cfbb2af 100644
--- a/backend/IM_API/Application/EventHandlers/MessageCreatedHandler/SignalREventHandler.cs
+++ b/backend/IM_API/Application/EventHandlers/MessageCreatedHandler/SignalREventHandler.cs
@@ -17,11 +17,13 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
private readonly IHubContext _hub;
private readonly IMapper _mapper;
private readonly IUserService _userService;
- public SignalREventHandler(IHubContext hub, IMapper mapper,IUserService userService)
+ public SignalREventHandler(IHubContext hub, IMapper mapper,
+ IUserService userService)
{
_hub = hub;
_mapper = mapper;
_userService = userService;
+
}
public async Task Consume(ConsumeContext context)
@@ -35,6 +37,10 @@ namespace IM_API.Application.EventHandlers.MessageCreatedHandler
var senderinfo = await _userService.GetUserInfoAsync(@event.MsgSenderId);
messageBaseVo.SenderName = senderinfo.NickName;
messageBaseVo.SenderAvatar = senderinfo.Avatar ?? "";
+ if (messageBaseVo.Type != MessageMsgType.Text)
+ {
+ messageBaseVo.Content = UrlTools.ProcessMessageUrl(messageBaseVo.Content, @event.BaseUrl);
+ }
await _hub.Clients.Group(@event.StreamKey).SendAsync("ReceiveMessage", new HubResponse("Event", messageBaseVo));
}
catch (Exception ex)
diff --git a/backend/IM_API/Application/EventHandlers/UploadEventHandler/MergeEventHandler.cs b/backend/IM_API/Application/EventHandlers/UploadEventHandler/MergeEventHandler.cs
new file mode 100644
index 0000000..72539bd
--- /dev/null
+++ b/backend/IM_API/Application/EventHandlers/UploadEventHandler/MergeEventHandler.cs
@@ -0,0 +1,21 @@
+using IM_API.Domain.Events;
+using IM_API.Interface.Services;
+using MassTransit;
+
+namespace IM_API.Application.EventHandlers.UploadEventHandler
+{
+ public class MergeEventHandler : IConsumer
+ {
+ private readonly IStorageService _storage;
+ public MergeEventHandler(IStorageService storage)
+ {
+ _storage = storage;
+ }
+
+ public async Task Consume(ConsumeContext context)
+ {
+ var @event = context.Message;
+ await _storage.MergeAsync(@event.TaskId, @event.ObjectName, @event.ChunckCount, @event.Parts);
+ }
+ }
+}
diff --git a/backend/IM_API/Configs/MQConfig.cs b/backend/IM_API/Configs/MQConfig.cs
index bcac5d6..745e2b0 100644
--- a/backend/IM_API/Configs/MQConfig.cs
+++ b/backend/IM_API/Configs/MQConfig.cs
@@ -7,6 +7,7 @@ using IM_API.Application.EventHandlers.GroupRequestHandler;
using IM_API.Application.EventHandlers.GroupRequestUpdateHandler;
using IM_API.Application.EventHandlers.MessageCreatedHandler;
using IM_API.Application.EventHandlers.RequestFriendHandler;
+using IM_API.Application.EventHandlers.UploadEventHandler;
using IM_API.Configs.Options;
using IM_API.Domain.Events;
using MassTransit;
@@ -37,6 +38,7 @@ namespace IM_API.Configs
x.AddConsumer();
x.AddConsumer();
x.AddConsumer();
+ x.AddConsumer();
x.UsingRabbitMq((ctx,cfg) =>
{
cfg.Host(options.Host, "/", h =>
diff --git a/backend/IM_API/Configs/MapperConfig.cs b/backend/IM_API/Configs/MapperConfig.cs
index 9ba80cc..4ba8095 100644
--- a/backend/IM_API/Configs/MapperConfig.cs
+++ b/backend/IM_API/Configs/MapperConfig.cs
@@ -4,9 +4,12 @@ using IM_API.Dtos;
using IM_API.Dtos.Auth;
using IM_API.Dtos.Friend;
using IM_API.Dtos.Group;
+using IM_API.Dtos.Message;
using IM_API.Dtos.User;
using IM_API.Models;
+using IM_API.Models.Upload;
using IM_API.Tools;
+using IM_API.VOs;
using IM_API.VOs.Conversation;
using IM_API.VOs.Message;
@@ -171,6 +174,35 @@ namespace IM_API.Configs
.ForMember(dest => dest.AuhorityEnum, opt => opt.MapFrom(src => GroupAuhority.REQUIRE_CONSENT))
.ForMember(dest => dest.StatusEnum, opt => opt.MapFrom(src => GroupStatus.Normal))
;
+
+ //上传任务模型转换
+ CreateMap()
+ .ForMember(dest => dest.FileName, opt => opt.MapFrom(src => src.FileName))
+ .ForMember(dest => dest.Status, opt => opt.MapFrom(src => UploadStatus.Created))
+ .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid()))
+ .ForMember(dest => dest.FileSize, opt => opt.MapFrom(src => src.FileSize))
+ .ForMember(dest => dest.FileHash, opt => opt.MapFrom(src => src.FileHash))
+ .ForMember(dest => dest.ContentType, opt => opt.MapFrom(src => src.ContentType))
+ .ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => DateTime.UtcNow))
+ ;
+
+ CreateMap()
+ .ForMember(dest => dest.TaskId, opt => opt.MapFrom(src => src.Id))
+ .ForMember(dest => dest.ChunkSize, opt => opt.MapFrom(src => src.ChunkSize))
+ .ForMember(dest => dest.TotalChunks, opt => opt.MapFrom(src => src.TotalChunks))
+ .ForMember(dest => dest.Concurrency, opt => opt.MapFrom(src => 5))
+ .ForMember(dest => dest.Skip, opt => opt.MapFrom(src => false))
+ .ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
+ ;
+
+ CreateMap()
+ .ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.ObjectName))
+ .ForMember(dest => dest.FileId, opt => opt.MapFrom(src => src.Id))
+ .ForMember(dest => dest.Provider, opt => opt.MapFrom(src => src.StorageProvider))
+ .ForMember(dest => dest.Format, opt => opt.MapFrom(src => src.ContentType))
+ .ForMember(dest => dest.Size, opt => opt.MapFrom(src => src.FileSize));
+
+ CreateMap();
}
}
}
diff --git a/backend/IM_API/Configs/Options/FileUploadOptions.cs b/backend/IM_API/Configs/Options/FileUploadOptions.cs
new file mode 100644
index 0000000..65554b1
--- /dev/null
+++ b/backend/IM_API/Configs/Options/FileUploadOptions.cs
@@ -0,0 +1,8 @@
+namespace IM_API.Configs.Options
+{
+ public class FileUploadOptions
+ {
+ public string DefaultStorage { get; set; }
+ public int ChunkSize { get; set; }
+ }
+}
diff --git a/backend/IM_API/Configs/ServiceCollectionExtensions.cs b/backend/IM_API/Configs/ServiceCollectionExtensions.cs
index 4823103..57c6753 100644
--- a/backend/IM_API/Configs/ServiceCollectionExtensions.cs
+++ b/backend/IM_API/Configs/ServiceCollectionExtensions.cs
@@ -29,7 +29,8 @@ namespace IM_API.Configs
services.AddScoped();
services.AddScoped();
services.AddScoped();
- services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton(sp =>
diff --git a/backend/IM_API/Controllers/MessageController.cs b/backend/IM_API/Controllers/MessageController.cs
index be09207..05501a8 100644
--- a/backend/IM_API/Controllers/MessageController.cs
+++ b/backend/IM_API/Controllers/MessageController.cs
@@ -3,6 +3,8 @@ using IM_API.Domain.Events;
using IM_API.Dtos;
using IM_API.Dtos.Message;
using IM_API.Interface.Services;
+using IM_API.Models;
+using IM_API.Tools;
using IM_API.VOs.Message;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
@@ -19,12 +21,12 @@ namespace IM_API.Controllers
{
private readonly IMessageSevice _messageService;
private readonly ILogger _logger;
- private readonly IEventBus _eventBus;
- public MessageController(IMessageSevice messageService, ILogger logger, IEventBus eventBus)
+ public MessageController(IMessageSevice messageService,
+ ILogger logger)
{
_messageService = messageService;
_logger = logger;
- _eventBus = eventBus;
+
}
[HttpPost]
[ProducesResponseType(typeof(BaseResponse), StatusCodes.Status200OK)]
@@ -32,15 +34,23 @@ namespace IM_API.Controllers
{
var userIdstr = User.FindFirstValue(ClaimTypes.NameIdentifier);
MessageBaseVo messageBaseVo = new MessageBaseVo();
+ var handledMessage = await _messageService.HandleFileMessageContentAsync(dto);
if(dto.ChatType == Models.ChatType.PRIVATE)
{
- messageBaseVo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, dto);
+ messageBaseVo = await _messageService.SendPrivateMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage);
}
else
{
- messageBaseVo = await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, dto);
+ messageBaseVo = await _messageService.SendGroupMessageAsync(int.Parse(userIdstr), dto.ReceiverId, handledMessage);
}
- return Ok(new BaseResponse(messageBaseVo));
+
+ if (messageBaseVo.Type != MessageMsgType.Text)
+ {
+ var request = HttpContext?.Request;
+ var baseUrl = $"{request.Scheme}://{request.Host}";
+ messageBaseVo.Content = UrlTools.ProcessMessageUrl(messageBaseVo.Content, baseUrl);
+ }
+ return Ok(new BaseResponse(messageBaseVo));
}
[HttpGet]
[ProducesResponseType(typeof(BaseResponse>), StatusCodes.Status200OK)]
diff --git a/backend/IM_API/Controllers/UploadController.cs b/backend/IM_API/Controllers/UploadController.cs
new file mode 100644
index 0000000..887866c
--- /dev/null
+++ b/backend/IM_API/Controllers/UploadController.cs
@@ -0,0 +1,124 @@
+using IM_API.Dtos;
+using IM_API.Interface.Services;
+using IM_API.Models.Upload;
+using IM_API.Tools;
+using IM_API.VOs;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Storage;
+using StackExchange.Redis;
+using System.Text;
+using System.Text.Json;
+using IDatabase = StackExchange.Redis.IDatabase;
+
+namespace IM_API.Controllers
+{
+ [Authorize]
+ [Route("api/[controller]")]
+ [ApiController]
+ public class UploadController : ControllerBase
+ {
+ private readonly IWebHostEnvironment _env;
+ private readonly IStorageService _storage;
+ private readonly IDatabase _redis;
+ public UploadController(IWebHostEnvironment env, IStorageService storage, IConnectionMultiplexer connectionMultiplexer)
+ {
+ _env = env;
+ _storage = storage;
+ _redis = connectionMultiplexer.GetDatabase();
+ }
+ [HttpPost("local/{taskId}/parts/{partNumber}")]
+ [ProducesResponseType(typeof(BaseResponse