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

时间:2011-10-05 02:55:37

标签: asp.net asp.net-mvc asp.net-mvc-3 entity-framework

如果我直接调用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;
            }


        }

2 个答案:

答案 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 

        }