上传后在页面上显示图像
本文关键字:显示 显示图 图像 | 更新日期: 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);
}
但我不确定这里出了什么问题
HttpPostedFileBase
的InputStream
并不总是在一次调用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();
}