如果我直接调用GetImage操作方法,即:localserver/admin/GetImage?ProductID=36
它会提示我下载文件。下载后,即使文件具有正确的扩展名,它也无法打开,使用我的图片文件夹中的常规* .jpeg图像进行测试。
另外如何在将文件保存到数据库时设置文件名,是否需要在数据库中为文件名创建额外的varchar类型等字段?
一旦分配给productMedia.ImageData,数据也全为零,因此为空。与“图像”不同,“图像”具有不同的数字。也许它应该是image.InputStream.Write而不是image.InputStream.Read?尝试过,但仍然没有去。
查看
@using (Html.BeginForm("SaveProduct", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
以下是保存程序:
if (image != null)
{
var ProductMedia = new ProductMedia();
ProductMedia.ImageMimeType = image.ContentType;
ProductMedia.ImageData = new byte[image.ContentLength];
image.InputStream.Read(ProductMedia.ImageData, 0, image.ContentLength);
ProductMedia.ProductID = product.ProductID;
context.ProductMedias.AddObject(ProductMedia);
context.SaveChanges();
}
和GetImage方法:
public FileContentResult GetImage(int productID)
{
var ProductImages = context.ProductMedias.FirstOrDefault(x => x.ProductID == productID);
if (ProductImages != null)
{
return File(ProductImages.ImageData, ProductImages.ImageMimeType);
}
else
{
return null;
}
}
答案 0 :(得分:1)
您的GetImage
方法没有任何问题,请检查您的保存程序是否有正确的内容类型正确的数据。并在数据库中检查ImageData
列中是否有足够的图像尺寸
对于第二个问题,是的,您需要一个单独的文件名列。
答案 1 :(得分:0)
这是应该使用的语法,它可以工作。
if (image != null)
{
var product = new Product();
product.FileName = image.FileName; //<- optional filename
product.ImageMimeType = image.ContentType;
int length = image.ContentLength;
byte[] buffer = new byte[length];
image.InputStream.Read(buffer, 0, length);
product.ImageData = buffer;
//Save product to database
}