2015-01-03 2 views
0

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

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Byte[] bytes = null; 

    if (FileUpload1.HasFile) 
    { 
     string filename = FileUpload1.PostedFile.FileName; 
     string filePath = Path.GetFileName(filename); 

     Stream fs = FileUpload1.PostedFile.InputStream; 

     BinaryReader br = new BinaryReader(fs); 

     bytes = br.ReadBytes((Int32)fs.Length); 
    } 

    string cs = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

    SqlConnection con = new SqlConnection(cs); 

    SqlCommand cmd = new SqlCommand("INSERT INTO disc_info (disc_name,menu) VALUES('" + TextBox.Text + "','" + bytes + "')", con); 

    con.Open(); 
    cmd.ExecuteNonQuery(); 

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

База данных: меню изображения

<asp:Image ID="ViewPhotoImage" runat="server" ImageUrl='<%# GetImage(Eval("menu")) %>' Height="190px" Width="180px"/> 

public string GetImage(object img) 
{ 
    return "data:image/jpg;base64," + Convert.ToBase64String((byte[]) img); 
} 
+0

Ваше изображение - это jpg или png? – aloisdg

+0

@aloisdg pic extension is jpg –

+0

еще я могу показать изображение ... PLZ помочь мне в этом ..... если какой-либо другой способ показать изображение с помощью повторителя PLZ, пришлите мне код ... –

ответ

1

Я думаю, ваша проблема может быть в том, как вы помещаете данные в базу данных. Возможно, у вас не могут быть действительные данные изображения в базе данных. Этот код запускается для вас при загрузке изображения? Когда я запускаю его, он вызывает ошибки в команде sql, потому что, когда вы неявно конвертируете байт [] в строку в C#, вы получаете «System.Byte []» вместо строкового представления данных. Вам нужно convert that byte[] into a binary string. Эта связь имеет кучу способов сделать это, и вот ваш код загрузки с одним из этих способов (не рекомендуется, см ниже):

(под редакцией, см комментарии ниже)

Byte[] bytes = null; 
string hex = "0"; 

if (FileUpload1.HasFile) 
{ 
    string filename = FileUpload1.PostedFile.FileName; 
    string filePath = Path.GetFileName(filename); 

    Stream fs = FileUpload1.PostedFile.InputStream; 

    BinaryReader br = new BinaryReader(fs); 

    bytes = br.ReadBytes((Int32)fs.Length); 
    hex = "0x" + BitConverter.ToString(bytes).Replace("-", ""); 
} 

string cs = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

SqlConnection con = new SqlConnection(cs); 

SqlCommand cmd = new SqlCommand("INSERT INTO disc_info (disc_name,menu) VALUES('" + TextBox.Text + "'," + hex + ")", con); 

con.Open(); 
cmd.ExecuteNonQuery();    

You также может захотеть переместить этот код sql в блок if, но, возможно, это то, что вы хотите, просто подумал, что я упомянул об этом на случай.

ОДНАКО ...

Я бы упущением, если бы я не настоятельно рекомендуем вам параметризировать ваш SQL заявление, чтобы избежать атак инъекций. Но это не только лучше для безопасности, но и упрощает работу с бинарными данными, поскольку нет необходимости преобразовывать строку. Вот соответствующий код с параметрами:

Byte[] bytes = null; 

if (FileUpload1.HasFile) 
{ 
    Stream fs = FileUpload1.PostedFile.InputStream; 

    BinaryReader br = new BinaryReader(fs); 

    bytes = br.ReadBytes((Int32)fs.Length); 
} 

string cs = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

SqlConnection con = new SqlConnection(cs); 

SqlCommand cmd = new SqlCommand("INSERT INTO disc_info (disc_name,menu) VALUES(@disc, @menu)", con); 
cmd.Parameters.AddWithValue("@disc", TextBox.Text); 
cmd.Parameters.AddWithValue("@menu", bytes); 
con.Open(); 
cmd.ExecuteNonQuery(); 

После того, как я сделал это, ваш другой код работал нормально, и я был в состоянии видеть мои тестовые изображения в ретранслятор. Надеюсь, это поможет!

+0

Это действительно хорошо –

+0

@ peterjb thankx много sir .... но здесь hex не выходит в текущий контекст. Ошибка –

+0

@pankajnath Ack Извините, я редактировал код. Когда я обработал тест, я поместил весь ваш код в блок if, но затем переместил его обратно, чтобы он был похож на ваш исходный код, но я оставил объявление 'hex' в блоке if, поэтому он isn 't доступно, когда я использовал его в коде sql вне блока if. Опять же, я настоятельно рекомендую не делать этого таким образом. – peterjb

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