ASP.NET C#中如何将二维码/Base64保存为图片并用于Crystal Report
实现二维码保存到应用程序路径(及Base64转图片保存)
一、直接将生成的二维码Bitmap保存到物理路径
基于你现有的代码,只需在生成二维码Bitmap后添加保存逻辑即可。关键是获取应用程序的物理路径,并确保文件夹存在、权限足够:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { TextBox6.Text = GenerateAndGetString(); QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(TextBox6.Text, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); // 生成二维码Bitmap并自动释放资源 using (Bitmap bitMap = qrCode.GetGraphic(20)) { // 定义保存目录:应用程序根目录下的QRCode文件夹 string saveDir = Server.MapPath("~/QRCode/"); // 目录不存在则创建 if (!Directory.Exists(saveDir)) { Directory.CreateDirectory(saveDir); } // 生成唯一文件名(避免重复覆盖) string fileName = $"Invoice_QR_{DateTime.Now:yyyyMMddHHmmssfff}.png"; string fullSavePath = Path.Combine(saveDir, fileName); // 保存二维码到物理路径 bitMap.Save(fullSavePath, ImageFormat.Png); // 保留原有的前端显示逻辑 using (MemoryStream ms = new MemoryStream()) { bitMap.Save(ms, ImageFormat.Png); byte[] byteImage = ms.ToArray(); img.Src = "data:image/png;base64," + Convert.ToBase64String(byteImage); } // fullSavePath即为图片的物理路径,后续Crystal Report可直接引用该路径 } } }
二、将Base64编码转换为图片并保存
如果需要单独处理Base64字符串(比如你已经有生成好的Base64编码),可以用以下方法实现保存:
/// <summary> /// 将Base64字符串转换为图片并保存到指定路径 /// </summary> /// <param name="base64Str">带前缀或不带前缀的Base64图片字符串</param> /// <param name="saveFullPath">图片保存的完整物理路径(含文件名)</param> private void SaveBase64ToImage(string base64Str, string saveFullPath) { // 移除Base64字符串中的前缀(如果存在) if (base64Str.StartsWith("data:image/png;base64,")) { base64Str = base64Str.Substring("data:image/png;base64,".Length); } // 将Base64转换为字节数组 byte[] imageBytes = Convert.FromBase64String(base64Str); // 写入文件到指定路径 File.WriteAllBytes(saveFullPath, imageBytes); }
注意事项
- 权限配置:确保应用程序池的运行身份对保存目录有写入权限,否则会抛出访问拒绝异常。
- 文件名唯一性:建议使用时间戳、发票编号等唯一标识作为文件名,避免覆盖已有图片。
- Crystal Report引用:在报表中调用图片时,使用保存的绝对物理路径,或根据报表配置使用相对路径,确保报表能正确读取图片。
内容的提问来源于stack exchange,提问作者Raja
相关产品推荐
相关产品推荐

