2014-09-16 2 views
0

У меня есть пример данных базы данных и изображений: 0xFFD8FFE000104A46494600010100000100010000FFE1018C45786966000049492A0008000000020031010200070000002600000069870400010000002E00000000000000476F6F676C6500000500009007000400000030323230099007000B0000007000000086920700080100007B00000002A00400010000006F02000003A0ASP.NET - Как преобразовать байты из базы данных в изображение и отобразить в браузере?

, и я думаю, что это изображение преобразуется в байтах. Мой код Выгрузка:

protected void Upload(object sender, EventArgs e) 
    { 
     FileUpload FileUpload1 = LoginView3.FindControl("FileUpload1") as FileUpload; 
     string filename = Path.GetFileName(FileUpload1.PostedFile.FileName); 
     string contentType = FileUpload1.PostedFile.ContentType; 
     string email = User.Identity.Name; 

     using (Stream fs = FileUpload1.PostedFile.InputStream) 
     { 
      using (BinaryReader br = new BinaryReader(fs)) 
      { 
       byte[] bytes = br.ReadBytes((Int32)fs.Length); 
       string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
       using (SqlConnection con = new SqlConnection(constr)) 
       { 
        string query = "insert into tblFiles values (@Name, @ContentType, @Data, @email)"; 
        using (SqlCommand cmd = new SqlCommand(query)) 
        { 
         cmd.Connection = con; 
         cmd.Parameters.AddWithValue("@Name", filename); 
         cmd.Parameters.AddWithValue("@ContentType", contentType); 
         cmd.Parameters.AddWithValue("@Data", bytes); 
         cmd.Parameters.AddWithValue("@email", email); 
         con.Open(); 
         cmd.ExecuteNonQuery(); 
         con.Close(); 
        } 
       } 
      } 
     } 
     Response.Redirect(Request.Url.AbsoluteUri); 
    } 

И теперь, я должен преобразовать данные из базы данных и отображения изображения в браузере. Я ищу учебники и информацию о «image.fromstream», «Обработчики изображений», «base64», и я не знаю, что я делаю неправильно. Я ищу готовый метод или учебники или информацию о новых, которые я должен был прочитать. Мой код базы данных SQL:

CREATE TABLE [dbo].[tblFiles] 
(
[id]   INT    IDENTITY (1, 1) NOT NULL, 
[Name]  VARCHAR (50) NOT NULL, 
[ContentType] NVARCHAR (200) NOT NULL, 
[Data]  VARBINARY (MAX) NOT NULL, 
[email]  VARCHAR (50) NOT NULL 
); 

Если я использую "Image.fromstream", у меня будет эта ошибка "Error 1 'System.Web.UI.WebControls.Image' не содержит определения для 'FromStream' "или„Error 1 директива использования пространства имен может быть применена только к пространствам имен, „System.Drawing.Image“ типа не пространство имен“

Я использую это:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Mvc; 
using System.Web.Security; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.IO; 
using System.IO.Stream; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Drawing.Image; 
+0

'Image.FromStream' отлично справится с анализом' byte [] ', хранящимся в базе данных, и предоставит вам метаданные об изображении вроде« что такое кодировка? Jpg? Gif? » или «какие размеры?» но если все, что вы делаете, отправляет его обратно в браузер, вы можете просто вернуть поток обратно к ответу. Этот подход немного небезопасен (что, если кто-то сохранил байк без изображения?] Каким-то образом?), Но если вы не делаете никаких манипуляций с изображениями, доверяйте своим входам и доверенным браузерам безопасно разбирать потоки изображений, тогда может быть достаточно – welegan

+0

Ошибка A Использование директивы пространства имен может применяться только к пространствам имен; 'System.Drawing.Image' - это тип, а не пространство имен. –

ответ

1

Вы не можете отправить обратно объект воображения. Это не то, как работает HTML.

Вы должны создать URL-адрес для каждого изображения, который затем будет внедрен в HTML, где изображение должно быть показано с использованием соответствующего тега.

Когда URL-адрес вызывается, вы возвращаете правильные метаданные и байтовый поток изображения из базы данных. Вы знаете, что через действие обработчика/контроллера.

Но вы не можете легко вставлять изображение в HTML (это возможно, но очень плохой практикой для чего-то подобного) И вы не можете вернуть System.Drawing или изображение или что-то в этом роде - потому что у brwoser нет .NET

+0

Можете ли вы написать пример кода? –

+0

Google.com. Например, http://www.dotnetperls.com/ashx. – TomTom

Смежные вопросы