上传后在页面上显示图像

本文关键字:显示 显示图 图像 | 更新日期: 2023-09-27 18:34:10

当用户上传图像并单击保存时,我的页面上有一个文件上传,该文件将作为 BYTE 存储在数据库中

当视图返回时,我传回 BYTE 以尝试显示图像,但我不断收到以下错误

System.Web 中发生类型为"System.Web.HttpException"的异常.dll但未在用户代码中处理其他信息:执行处理程序"System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper"的子请求时出错。

我看内部异常如下

输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。

我过去曾在其他没有引起问题的项目中使用此代码

这是我的观点非常基本,它确实有其他控件,但为简单起见,我只显示文件上传

  @if (ViewBag.ImageData != null)
        {
            <div class="control-group">
                <label class="control-label" for="WebAddress">
                    Preview
                </label>
                <div class="controls">
                    <img src="data:image;base64,@System.Convert.ToBase64String(Model.RetailerImage)" width="80" height="80" />
                </div>
            </div>
        }

这是我的控制器

 [AuthorizeRolesAttribute(RoleType.Retailer)]
    [HttpPost]
    public ActionResult EditStoreProfile(Retailer retailer)// ,string[] selectedBrands)
    {
        if (ModelState.IsValid)
        {
            if (Request.Files.Count > 0)
            {
                var file = Request.Files[0];
                if (file != null)
                {
                    int ContentLength = file.ContentLength;
                    // Create Byte Array
                    byte[] bytImg = new byte[ContentLength];
                    // Read Uploaded file in Byte Array
                    file.InputStream.Read(bytImg, 0, ContentLength);
                    ViewBag.ImageData = bytImg;
                    retailer.RetailerImage = bytImg; // Store image byte in model ready for saving in the db, this will also be passed back to the view to be displayed as a preview
                }
            }
            try
            {
                //  retailer.RetailersProductBrands = GetRetailerBrands(selectedBrands, retailer.RetailerID);
                UnitOfWork.Retailer.Save(retailer);
                // UnitOfWork.RetailersProductBrandsRepository.DeleteExistingRetailerProductBrands(retailer.RetailerID);
                Retailer updatedRetails = UnitOfWork.Retailer.GetRetailer(retailer.RetailerID);
                //Email notification to administrator
                new MailController().NotifyStoreProfileUpdate(updatedRetails).Deliver();
                return RedirectToAction("Index");
            }
            catch (Exception)
            {
                ModelState.AddModelError(string.Empty, Constant.GenericErrorMessage);
                return View(retailer);
            }
        }
        PopulateViewBags();
        return View(retailer);
    }

但我不确定这里出了什么问题

上传后在页面上显示图像

HttpPostedFileBaseInputStream并不总是在一次调用Read时返回所有字节。很可能您只部分获取了该文件。

var file = Request.Files[0];
if (file != null)
{
    MemoryStream memoryStream = file.InputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        file.InputStream.CopyTo(memoryStream);
    }
    byte[] bytImg = memoryStream.ToArray();
}