簡體   English   中英

使用HttpHandlers從數據庫中檢索文件名

[英]Retrive file name from database using HttpHandlers

我有EmpNo(Int)和EmpImage(Image)列的數據庫。

我正在使用HttpHandler來顯示圖像。

我將圖像存儲在數據庫和文件夾中。

現在,我想將文件夾中圖像的名稱更改為在上載時未更改的EmpNo的名稱。

因此,需要從數據庫中獲取圖像名稱,以將其與文件夾中的圖像名稱進行比較,然后重命名它們。

如何使用通用處理程序從數據庫中獲取的二進制數據中獲取或提取圖像名稱。

我已在處理程序中附加了代碼以供參考。

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;

public class Lab_14___ImageFetchingHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        SqlConnection vConn = new SqlConnection("server=localhost; database=Asp.netDemoWebsiteDatabase; Integrated Security = SSPI;");
        vConn.Open();
        String vQuery = "Select EmpImage from EmpImages where Empno=@id";
        SqlCommand vComm = new SqlCommand(vQuery, vConn);

        //Receive the Id from some Form
        String vId = context.Request.QueryString["id"];
        vComm.Parameters.AddWithValue("@id", vId);
        SqlDataReader vDr = vComm.ExecuteReader();
        while (vDr.Read())
        {
            context.Response.ContentType = "image/jpg";
            context.Response.BinaryWrite((byte[])vDr["EmpImage"]);

            [ Here I need the Images names to store in List or array.How?? ]
        }
        vConn.Close();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

這是檢查圖像元數據的不同方法。

Byte[] content = (Byte[])vDr["EmpImage"]

//Option 1
Image img = new Bitmap(new MemoryStream(content));
Encoding _Encoding = Encoding.UTF8;

var props = img.PropertyItems;
string propData;
foreach (var propertyItem in props)
{
    propData = _Encoding.GetString(propertyItem.Value);
    Debug.WriteLine("{0}[{1}]", propertyItem.Id, propData);
}

//option 2 - require reference of PresentationCore and WindowsBase and then using System.Windows.Media.Imaging
var imgFrame = BitmapFrame.Create(new MemoryStream(content));
var metadata = imgFrame.Metadata as BitmapMetadata;

//option 3 - require MetadataExtractor Nuget package
var mr = ImageMetadataReader.ReadMetadata(new MemoryStream(content));
foreach (var directory in mr)
{
    foreach (var tag in directory.Tags)
    {
        Debug.WriteLine("{0} - {1} = {2}]", directory.Name, tag.Name, tag.Description);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM