Возникают проблемы с сохранением и / или возвратом \ отображением действительного файла изображения с использованием FileContentResult и HttpPostedFileBase - PullRequest
1 голос
/ 05 октября 2011

Если я вызываю метод действия 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 ]

1 голос
/ 05 октября 2011

Нет ничего плохого в вашем методе GetImage. Проверьте правильность типа содержимого и сохраните правильные данные.А в базе данных проверьте, достаточно ли у вас размера для изображения в столбце ImageData.
Для второго вопроса, Да, вам нужен отдельный столбец для имени файла.

0 голосов
/ 06 октября 2011

Вот синтаксис, который следует использовать, и он работает.

        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 

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...