Asp.net 使用FileContentResult和HttpPostedFileBase保存和/或返回\显示有效图像文件时出现问题

Asp.net 使用FileContentResult和HttpPostedFileBase保存和/或返回\显示有效图像文件时出现问题,asp.net,asp.net-mvc,asp.net-mvc-3,entity-framework,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,如果我直接调用GetImage操作方法,即:localserver/admin/GetImage?ProductID=36,它会提示我下载文件。下载时,即使文件具有正确的扩展名,它也不会打开,使用my pictures文件夹中的常规*.jpeg图像进行测试。 另外,在将文件保存到数据库时如何设置文件名,是否需要在数据库中为文件名创建额外的varchar type等字段 一旦分配给productMedia.ImageData,数据也将全部为零,因此为空。与“图像”不同,图像中有不同的数字。也许应该

如果我直接调用GetImage操作方法,即:
localserver/admin/GetImage?ProductID=36
,它会提示我下载文件。下载时,即使文件具有正确的扩展名,它也不会打开,使用my pictures文件夹中的常规*.jpeg图像进行测试。 另外,在将文件保存到数据库时如何设置文件名,是否需要在数据库中为文件名创建额外的varchar type等字段

一旦分配给productMedia.ImageData,数据也将全部为零,因此为空。与“图像”不同,图像中有不同的数字。也许应该是image.InputStream.Write而不是image.InputStream.Read?试过了,但还是不行

看法

以下是保存过程:

   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;
            }


        }

GetImage
方法没有问题请检查保存过程中的内容类型是否正确以及数据是否正确。并在数据库中检查您是否有足够的大小来容纳
ImageData
列中的图像。

对于第二个问题,是的,您需要一个单独的列作为文件名。

您的
GetImage
方法没有问题请检查您的保存过程以获得正确的内容类型正确的数据。并在数据库中检查您是否有足够的大小来容纳
ImageData
列中的图像。

对于第二个问题,是的,您需要一个单独的列作为文件名。

这里是应该使用的语法,它可以工作

        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 

        }
if(图像!=null)
{
var product=新产品();

product.FileName=image.FileName;//以下是应该使用的语法,它可以正常工作

        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 

        }
if(图像!=null)
{
var product=新产品();
product.FileName=image.FileName;//对ImageData使用varbinary(MAX)对ImageData使用varbinary(MAX)