【发布时间】:2015-08-18 21:06:28
【问题描述】:
我正在尝试将上传的图像转换为字节数组,以便将其存储在数据库表中。
下面的代码用于执行从图像到字节数组的转换:
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", "News item was not uploaded");
return View(model);
}
ModelState.AddModelError("fileNotImage", "the file you have uploaded is not an image");
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;
}
【问题讨论】:
-
那么
image.ContentLength是什么?我怀疑它是 0... -
检查断点时我上传的最后一张图片的内容长度为 394323
-
你在哪里打电话给
ConvertToBytes?也许你已经从流中读过? (这可以解释一切。) -
90% 的时间使用
BinaryReader是错误的选择。
标签: c# bytearray binaryreader httppostedfilebase