ASP.NET MVC - у меня проблемы с хранением и отображением изображения в базе данных - PullRequest
2 голосов
/ 01 сентября 2009

Я выдергиваю свои волосы из-за этого с пятницы, и я схожу с ума. Я хочу, чтобы у пользователя была возможность отправить форму с изображением и сохранить это изображение в базе данных. Затем я хочу, чтобы это изображение отображалось в моем указателе.

Я уже пробовал все остальные разделы справки stackoverflow, и ни одна из них не работает для меня.

Я следую указаниям "Pro ASP.NET MVC Framework" Стивена Сандерсона (стр. 195-198), и он просто не работает. Он прекрасно работает в своем примере приложения, которое сопровождает книгу.

Я создал тестовое приложение MVC, которое имеет индекс и создает представления. Это что-то сохраняет в базу данных, потому что я вижу поле «Двоичные данные», заполненное этими двумя словами. Но это не будет отображаться. Я не знаю, будет ли он отображаться, потому что я неправильно сохраняю изображение в базу данных или что-то еще.

Здесь слишком много кода для публикации, но я скомпилировал простое приложение в файл .zip, который точно показывает, что я пытаюсь выполнить. Я надеюсь, что это разрешено. Может, кто-нибудь из вас, экспертов MVC, скачает его и расскажет, что я делаю неправильно и почему это не работает? Я нахожусь в конце этого остроумия, и я так растерялся.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Большое спасибо, Шон

Мой файл находится по адресу: http://www.fraxis.com/test.zip

Он был построен с использованием Visual Studio 2008 с .NET 3.5 (SP1) и ASP.NET MVC 1.0.

Все находится в HomeController и Home view. Индексировать и создавать. База данных находится в app_data.

Ответы [ 3 ]

2 голосов
/ 01 сентября 2009

В вашем классе HomeController замените строку 52:

image.InputStream.Read(TableToCreate.Image, 0, image.ContentLength);

с этими 2 строками:

BinaryReader reader = new BinaryReader(image.InputStream);
TableToCreate.Image = reader.ReadBytes(image.ContentLength);
1 голос
/ 01 сентября 2009

Проверьте это сообщение.

Возникли проблемы с вызовом метода Post Controller…

EDIT

Тогда у меня есть следующее, чтобы вернуть изображение;

Контроллер;

public FileResult GetImage(int id)
{
  return File(PhotoHelper.GetImageBytes(id), "image/jpeg");
}

На мой взгляд;

<%= Html.Image("img", "/Photos/GetImage?id=" + Model.Photo.Id.ToString(), "BioPic", new { Width = "350px" })%>

Итак, по сути, я сохранил поток байтов в базе данных, затем извлек их, а затем изображение захватывает это изображение из действия в моем контроллере, называемого GetImage.

Это отвечает на ваш вопрос?

0 голосов
/ 01 марта 2011
Public int InsertUpdateImage(
        ref System.Data.SqlClient.SqlConnection _SqlConnection,
        string _SQL,
        System.Drawing.Image _Image,
        string _ImageFieldName,
        System.Drawing.Imaging.ImageFormat _ImageFormat)
{
    int _SqlRetVal = 0;

    try
    {
        // lets add this record to database
        System.Data.SqlClient.SqlCommand _SqlCommand
            = new System.Data.SqlClient.SqlCommand(_SQL, _SqlConnection);

        // Convert image to memory stream
        System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream();
        _Image.Save(_MemoryStream, _ImageFormat);

        // Add image as SQL parameter
        System.Data.SqlClient.SqlParameter _SqlParameter 
            = new System.Data.SqlClient.SqlParameter("@" + _ImageFieldName, SqlDbType.Image);

        _SqlParameter.Value = _MemoryStream.ToArray();
        _SqlCommand.Parameters.Add(_SqlParameter);

        // Executes a Transact-SQL statement against the connection 
        // and returns the number of rows affected.
        _SqlRetVal = _SqlCommand.ExecuteNonQuery();

        // Dispose command
        _SqlCommand.Dispose();
        _SqlCommand = null;
    }
    catch (Exception _Exception)
    {
        // Error occurred while trying to execute reader
        // send error message to console (change below line to customize error handling)
        Console.WriteLine(_Exception.Message);

        return 0;
    }

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