2016-06-05 5 views
2

Ich habe Datenbank mit EmpNo (Int) und EmpImage (Bild) Spalten.Retrieve Dateiname von der Datenbank mit HttpHandlers

Ich verwende HttpHandler, um die Bilder anzuzeigen.

Ich speichere Bilder sowohl in der Datenbank als auch im Ordner.

Jetzt möchte ich die Namen der Bilder im Ordner als Namen von EmpNo ändern, deren ich beim Hochladen nicht geändert habe.

Also müssen Sie die Bilder Namen aus der Datenbank holen, um sie mit den Bildnamen im Ordner zu vergleichen und sie umzubenennen.

Wie kann ich holen oder extrahieren die Bildnamen aus den binären Daten, die ich von der Datenbank mit generischen Handler bekommen.

Ich habe den Code In Handler als Referenz beigefügt.

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 [email protected]"; 
     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; 
     } 
    } 

}

+0

Der Image-Name wird nicht mit den in der Datenbank gespeicherten binären Daten erfasst, es handelt sich lediglich um binäre Daten. Sie müssen den Bildnamen während des Hochladens in einer separaten Spalte speichern und speichern. Auf diese Weise haben Sie auch den Namen, wenn Sie den Bildinhalt aus der Datenbank abrufen. – Vinod

+0

Können Sie ein Testprojekt hochladen, damit ich es überprüfen kann? – Vinod

+0

Ha, Vinod Ich habe meinen Kommentar entfernt Weil ich herausgefunden habe, dass ich falsch lag und meine Aussage falsch war. Es zeigt einen beliebigen Dateinamen an. Es konvertiert nur die binären Daten in ein Bild. Ich dachte, wenn Datei in Binär konvertiert wird, wird der Name auch in Binär konvertiert, da es der Teil der Datei ist. Habe ich recht? – Louis

Antwort

0

Hier sind verschiedene Arten von Bildmetadaten zu inspizieren.

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

@Nithin - Bitte laden Sie ein Testprojekt hoch, das ich untersuchen kann, um zu sehen, warum und wie der Dateiname angezeigt wird, wenn Sie mit der rechten Maustaste klicken und Bild anzeigen wählen. Welchen Browser benutzen Sie zum Testen? – Vinod

+0

Danke für den Hilfe Mann – Louis