Как лучше сохранить и загрузить картинку на c # (asp.net) и SQL Server? - PullRequest
0 голосов
/ 08 июля 2011

Я хочу сохранить фотографии и показать их в виде таблицы с названием, описанием, ценой и другими вещами, но я не знаю, как это сделать. Во-первых, как мне загрузить изображение? В настоящее время я использую приложение Windows Forms для сохранения другой информации, но теперь мне нужно также сохранить изображение. Эти изображения необходимо будет просмотреть с веб-страницы в приложении ASP.NET.

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

Может кто-нибудь показать мне, как сохранить изображение в базе данных, а затем отобразить его в виде сетки?

1 Ответ

3 голосов
/ 08 июля 2011

Если вы хотите сохранить его в базе данных, вы должны использовать varbinary. Он функционально эквивалентен типу столбца image, но image устарел в пользу varbinary(MAX). Как правило, чтобы использовать изображение из базы данных, вы должны создать HttpHandler (или контроллер / действие при использовании ASP.NET MVC), который обрабатывает URL-адрес, кодирующий идентификатор, связанный с изображением, например, http://www.example.com/imagehandler.ashx?id=42. В этом случае обработчик будет знать, чтобы найти изображение с идентификатором 42 в базе данных и создать ответ из байтового массива, соответствующего содержимому столбцов, с правильным типом MIME.

Пример кода: полностью не проверено

public class ImageHandler: IHttpHandler
{
    public void ProcessRequest (HttpContext context)
    {
         int imageID = -1;
         if (context.Request.QueryString["id"] == null || !int.TryParse( context.Request.QueryString["id"], out imageID) ) 
         {
             throw new ArgumentException("Invalid or missing image id.");
         }

         using (var context = new ImagesDataContext())
         {
              var image = context.Images.SingleOrDefault( i => i.ID == imageID );
              if (image != null)
              {
                   context.Response.ContentType = image.MimeType;
                   context.Response.BinaryWrite( image.Content );
              }
              else
              {
                  // decide how you want to handle an image that isn't found
              }
         }

    }

    public bool IsReusable
    {
        get { return false; }
    } 
}
...