.net8.0_webapi 生成二维码

文章目录

一、思路

环境:

1、内容生成二维码图片

2、保存到wwwroot为png格式

3、返回存储路径保存到数据库

4、前端读取显示

二、实现

1、Program.cs

csharp 复制代码
//配置静态文件路径
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")),
});

2、二维码辅助类QrCodeHelper.cs

csharp 复制代码
using QRCoder.Core;
using System.Drawing;
using System.Drawing.Imaging;
namespace Common
{
    /// <summary>
    /// 二维码生成
    /// </summary>
    public class QrCodeHelper
    {
        /// <summary>
        /// 生成二维码并保存到指定路径
        /// </summary>
        public String Create(string content, int size = 20)
        {
            string uploadPath = "";
            string filename = DateTime.Now.ToString("HHssmm") + ".png";
            //保存路径
            uploadPath = $"wwwroot\\upload\\{DateTime.Now.ToString("yyMMdd")}\\";
            if (!Directory.Exists(uploadPath))
                Directory.CreateDirectory(uploadPath);
            // 创建QRCodeGenerator实例
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            // 生成二维码数据,ECCLevel.Q表示纠错级别(可选Q/L/M/H)
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q);
            // 创建二维码图像
            QRCode qrCode = new QRCode(qrCodeData);
            // 获取Bitmap对象,参数:像素大小、前景色、背景色
            Bitmap qrCodeImage = qrCode.GetGraphic(size, Color.Black, Color.White, false);

            // 保存到指定路径(默认PNG格式)
            qrCodeImage.Save(uploadPath + filename, ImageFormat.Png);

            // 释放资源(避免内存泄漏)
            qrCodeImage.Dispose();
            //返回读取路径
            return $"/upload/{DateTime.Now.ToString("yyMMdd")}/"+filename; ;

        }
    }
}
/*
// 使用示例
  QrCodeHelper cd = new QrCodeHelper();
  m.qrcodeSrc = cd.Create("https://www.example.com");
// 支持:需要nuget  QRCoder.Core包
*/

三、效果

保存后:


读出的路径加上api前缀就OK

相关推荐
rockey6277 小时前
AScript之eval函数详解
c#·.net·script·eval·expression·动态脚本
周杰伦fans1 天前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
William_cl2 天前
【C#/.NET 进阶】ASP.NET 架构与最佳实践:DI 依赖注入(IoC 核心)从入门到避坑
c#·asp.net·.net
武藤一雄2 天前
WPF:MessageBox系统消息框
前端·microsoft·c#·.net·wpf
武藤一雄2 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
唐青枫3 天前
别再层层传参了!C#.NET AsyncLocal 异步上下文透传实战
c#·.net
小邓的技术笔记3 天前
.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理
.net
夏霞3 天前
IIS 应用程序池 3 种标识:ApplicationPoolIdentity / LocalSystem / LocalService 权限区别(超清晰)
c#·.net
回忆2012初秋3 天前
Quartz.NET 全面解析与实战指南
.net
我是唐青枫4 天前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net