Rename projects to FileShare
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
using FileShare_Services.Core;
|
||||
|
||||
namespace FileShare_Services.Services.QrCode
|
||||
{
|
||||
public interface IQrCodeService
|
||||
{
|
||||
Task<object?> GenerateQrCodeAsync(ServiceEndpointContext ctx);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
namespace FileShare_Services.Services.QrCode
|
||||
{
|
||||
public sealed record QrCodeResponse(string Url, string QrCodeBase64);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using FileShare_Common.Core;
|
||||
using FileShare_Services.Core;
|
||||
using QRCoder;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace FileShare_Services.Services.QrCode
|
||||
{
|
||||
public sealed class QrCodeService : IQrCodeService
|
||||
{
|
||||
public Task<object?> GenerateQrCodeAsync(ServiceEndpointContext ctx)
|
||||
{
|
||||
var ip = GetLanIpAddress();
|
||||
if (ip is null)
|
||||
throw new InvalidOperationException("无法获取局域网IP地址");
|
||||
|
||||
var url = $"http://{ip}:5206";
|
||||
var base64 = GeneratePngBase64(url);
|
||||
return Task.FromResult<object?>(ResponseHelper.Ok(new QrCodeResponse(url, base64)));
|
||||
}
|
||||
|
||||
private static string GeneratePngBase64(string content)
|
||||
{
|
||||
using var generator = new QRCodeGenerator();
|
||||
using var data = generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
|
||||
using var png = new PngByteQRCode(data);
|
||||
var bytes = png.GetGraphic(20);
|
||||
return $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
|
||||
}
|
||||
|
||||
private static string? GetLanIpAddress()
|
||||
{
|
||||
return NetworkInterface.GetAllNetworkInterfaces()
|
||||
.Where(ni => ni.OperationalStatus == OperationalStatus.Up
|
||||
&& ni.NetworkInterfaceType != NetworkInterfaceType.Loopback)
|
||||
.SelectMany(ni => ni.GetIPProperties().UnicastAddresses)
|
||||
.Select(ua => ua.Address)
|
||||
.FirstOrDefault(ip =>
|
||||
ip.AddressFamily == AddressFamily.InterNetwork
|
||||
&& !IPAddress.IsLoopback(ip)
|
||||
&& !ip.ToString().StartsWith("169.254"))
|
||||
?.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user