ASP.NET хранит изображение в SQL и получает для Asp: изображение - PullRequest
3 голосов
/ 31 марта 2009

Я ищу файл для загрузки изображений jpeg, gif и т. Д. В базу данных SQL на странице updateprofilepicture. Затем на странице профиля я хочу получить изображение из базы данных SQL и показать его в элементе управления Asp: Image. У меня есть много кода, пытающегося сделать это, и это не работает. Таблица содержит столбец типа Image.

Ответы [ 7 ]

8 голосов
/ 31 марта 2009

Как упоминал Джоэл, вы должны использовать HttpHandler или страницу для отображения изображения. Вот пример кода для вывода изображения ( Image.ashx ):

// ProcessRequest method of Image.ashx
long imageId = Convert.ToInt64(Request.QueryString["ImageId"]);

using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand(
    "SELECT ImageFile FROM ImageTable WHERE ImageId = @ImageID", conn))
{
    command.Parameters.Add("@ImageID", SqlDbType.Int).Value = imageId;
    conn.Open();

    Response.ContentType = "image/gif";
    Response.BinaryWrite((byte[]) command.ExecuteScalar());
}

, а затем используйте изображение на своей странице как:

  <asp:Image id="Image1" runat="server" ImageUrl="Image.ashx?ImageID=12"/>
2 голосов
/ 31 марта 2009

Если вы используете SQL 2005 или выше, вы не должны использовать тип данных Image, потому что теперь он устарел . Вместо этого вы хотите использовать новый тип Varbinary (MAX), если это возможно. После того, как вы сохранили его, все, что вам нужно сделать, это извлечь его с помощью вызова ADO.Net и привести значение ячейки к типу Byte [], а затем вызвать Response.BinaryWrite, как в примере выше ScarletGarden.

2 голосов
/ 31 марта 2009

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

<img src="~/MyImageHandler.ashx?UserID=1234" alt="User 1234 avatar" width="100px" height="150px" />

Это конечный результат вашего <asp:Image .../> контроля. Затем браузер отправит совершенно отдельный Http-запрос на получение изображения. Так работают картинки на сайтах. Затем вам нужно будет обработать этот дополнительный запрос. Для этого создайте Http handler (*.ashx file) и используйте его для извлечения соответствующих данных изображения из базы данных и отправки в браузер.

1 голос
/ 04 апреля 2010

Вместо сохранения изображений в базе данных, сохраните путь и / или имя файла для изображения. Изображения будут заполнять базу данных и замедлять ее.

1 голос
/ 06 августа 2009

После нескольких сотен гигабайт изображений, я полагаю, вы подумаете, что файловая система операционной системы и статические http-серверы файлов лучше подходят для хранения базы данных, которая занята многими другими деталями изображений. Он также позволяет использовать тысячи существующих бесплатных инструментов для работы, перемещения, размещения и т. Д. Изображений.

0 голосов
/ 29 ноября 2014

Попробуйте эти ссылки, это может помочь вам ..

Вы также можете попробовать сохранить файлы изображений на сервере и сохранить пути в таблице Sql. по этим ссылкам

http://pratikataspdotnet.blogspot.in/2014/11/retrieve-images-from-path-stored-in.html

0 голосов
/ 14 марта 2013
protected void Page_Load(object sender, EventArgs e) {
    GridView1.DataSourceID = "";
    GridView1.DataSource = SqlDataSource1;
    GridView1.DataBind();
}

protected void btnSubmit_Click(object sender, EventArgs e) {
    string strImageName = txtImageName.Text.ToString();

    if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "") {
        byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
        HttpPostedFile uploadedImage = FileUpload1.PostedFile;
        uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);

        // Create SQL Connection
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=RND3" + "\\" + "SQLEXPRESS;Initial Catalog=SSSolutionFiles;Integrated Security=True";

        // Create SQL Command 
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "INSERT INTO Imagess(ImageName,Image)" + " VALUES (@ImageName,@Image)";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;

        SqlParameter ImageName = new SqlParameter("@ImageName", SqlDbType.VarChar, 50);
        ImageName.Value = strImageName.ToString();
        cmd.Parameters.Add(ImageName);

        SqlParameter UploadedImage = new SqlParameter("@Image", SqlDbType.Image, imageSize.Length);
        UploadedImage.Value = imageSize;
        cmd.Parameters.Add(UploadedImage);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

        Label1.Text = "File Uploaded";

        GridView1.DataSourceID = "";
        GridView1.DataSource = SqlDataSource1;
        GridView1.DataBind();
        con.Close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...