如何在.Net Core中保存动态生成的QRCode

时间:2019-12-12 12:30:25

标签: c# asp.net-core model-view-controller .net-core

我正在开发认证系统。为了不让您觉得书信麻烦,我需要在同一页面上保存学生和护照的QRQR码。

  

生成qrcode的代码在我的GET方法中,如下所示:

var matno = HttpContext.Session.GetString("LoggedInUser");
ViewBag.QRCodeDataFor = matno;
var student = _context.Students.FirstOrDefault(c => c.MatricNumber == matno);
using (MemoryStream ms = new MemoryStream())
{
    QRCodeGenerator qrGenerator = new QRCodeGenerator();
    QRCodeData qrCodeData = qrGenerator.CreateQrCode(student.ProfileHash, QRCodeGenerator.ECCLevel.Q);
    QRCode qrCode = new QRCode(qrCodeData);
    using (Bitmap bitMap = qrCode.GetGraphic(20))
         {
            bitMap.Save(ms, ImageFormat.Png);
            ViewBag.QRCodeImage = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
          }
}
  

这是视图:

<img src="@ViewBag.QRCodeImage" alt="QRCode Image" style="width:150px" />
<input type="file" asp-for="Passport">
                                       asp-for="QRCodeData" />

这是我保存图像的代码

var currentstudent = _context.Students.FirstOrDefault(c => c.MatricNumber == students.MatricNumber);
            if (ModelState.IsValid)
            {
                var files = HttpContext.Request.Form.Files;
                foreach (var Image in files)
                {
                    if (Image != null && Image.Length > 0)
                    {
                        var file = Image;
                        var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads");
                        //"/" + Path.GetFileName(pic.FileName)
                        if (file.Length > 0)
                        {
                            //var fileName = Guid.NewGuid().ToString().Replace("-", "") + Path.GetExtension(file.FileName);
                            var fileName = Path.GetFileName(file.FileName);
                            using (var fileStream = new FileStream(Path.Combine(uploads, fileName), FileMode.Create))
                            {
                                //ViewBag.MyPassport = "/" + uploads + Path.GetFileName(file.FileName);
                                //var a = ViewBag.MyPassport;
                                await file.CopyToAsync(fileStream);
                                if (fileName.Contains("dotqrcode"))
                                {
                                    currentstudent.QRCodeData = fileName;
                                }
                                else
                                {
                                    currentstudent.Passport = fileName;
                                }
                            }

                        }
                    }
                }
                _context.Update(currentstudent);
                _context.SaveChanges();
                return RedirectToAction("TempID", "Identity");
            }
            else
            {
                return BadRequest(ModelState);
            }

再次,我面临的挑战是如何保存此QR Code图片。

预先感谢

0 个答案:

没有答案