使用HttpHandlers从数据库中恢复文件名

时间:2016-06-05 21:00:35

标签: c# asp.net file-upload ihttphandler

我有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;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

以下是检查图像元数据的不同方法。

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);
    }
}