无法将上传的图像转换为字节数组。
无法将上传的图像转换为字节数组。
我正在尝试将上传的图像转换为字节数组,以便将其存储在数据库表中。
以下代码用于将图像转换为字节数组:
public byte[] ConvertToBytes(HttpPostedFileBase image) { BinaryReader reader = new BinaryReader(image.InputStream); var imageBytes = reader.ReadBytes((int)image.ContentLength); return imageBytes; }
当我在这段代码上设置断点以查看返回的内容时,imageBytes变量显示为{byte[0]}。
下面的代码是用于上传此图像的视图控制器中的接收ActionResult(目前我正在使用文件输入来选择和上传图像):
[HttpPost] public ActionResult NewsManager(NewsManagerViewModel model) { var newsManagerRepository = new NewsManagerRepository(); var currentUser = User.Identity.Name; if (ModelState.IsValid) { HttpPostedFileBase file = Request.Files["ImageData"]; var fileIsImage = file.IsImage(); if (fileIsImage) { model.Author = currentUser; var newsUploaded = newsManagerRepository.UploadNews(file, model); if (newsUploaded == 1) { return View(); } ModelState.AddModelError("uploadFailed", "新闻项目未上传"); return View(model); } ModelState.AddModelError("fileNotImage", "您上传的文件不是图像"); return View(model); } return View(model); }
有人有任何关于为什么我转换的图像没有成功转换为字节数组的想法吗?
任何建议都将非常感激,该应用程序目前是MVC 5和.NET版本4.5。
调用方法的代码如下:
public int UploadNews(HttpPostedFileBase file, NewsManagerViewModel model) { model.BannerImage = ConvertToBytes(file); var ndtms2Utils = new NDTMS2UtilsEntities(); var news = new News { Title = model.Title, Author = model.Author, BannerImage = model.BannerImage, DateCreated = DateTime.Now, NewsContent = model.NewsContent }; ndtms2Utils.News.Add(news); int i = ndtms2Utils.SaveChanges(); if (i == 1) { return 1; } return 0; }
无法将上传的图像转换为字节数组的原因是因为代码中使用了一个名为StreamToByteArray的扩展方法,但是Visual Studio无法找到该方法。
解决方法是将这个扩展方法添加到任何静态类中即可。
以下是修改后的代码:
public static class StreamExtensions { public static byte[] StreamToByteArray(this Stream input) { input.Position = 0; using (var ms = new MemoryStream()) { int length = System.Convert.ToInt32(input.Length); input.CopyTo(ms, length); return ms.ToArray(); } } } public byte[] ConvertToBytes(HttpPostedFileBase image) { return image.InputStream.StreamToByteArray(); }
现在应该可以成功将上传的图像转换为字节数组了。