2011-01-13 5 views
2

So bin ich ein paar Probleme, die Bilder von außerhalb des Projektordners ...Bilder anzeigen von außerhalb von ASP.NET-Anwendung

Ich scheine die Anzeige nur in der Lage sein, Bilder für den Zugriff auf im „~“ Verzeichnis und Unterverzeichnisse ...

Angenommen, ich möchte auf Bilder von "E:/XYZ/11-01-01 New Year /" oder etwas ähnliches zugreifen, wie kann ich das tun?

Hinweis: Ich habe Berechtigungen für alle Ordner und Unterordner, gut lesbar auf „Jeder“, so IIS/Visual Studio in der Lage sein sollte, aber zeigt nicht die Bilder in der Bildsteuerung

+1

Welchen Code haben Sie ausprobiert und welche Fehler/Ausnahmen bekommen Sie? –

+1

Am einfachsten ist es, ein virtuelles Verzeichnis in IIS einzurichten, aber das bedeutet normalerweise, dass die URL ohne Authentifizierungsprüfungen öffentlich zugänglich ist. Wenn Sie den Zugriff auf die Dateien basierend auf dem Anmeldestatus/den Benutzerrollen steuern möchten oder wenn Sie eine benutzerdefinierte Protokollierung durchführen möchten, sollten Sie die Route "IHTTPHandler" verwenden. –

+0

@pauli: Es gibt keinen Fehler, weil die Bildkontrollen keine Fehler werfen ... Sie bleiben einfach leer. –

Antwort

5

Sie eine verwenden sollten HttpHandler um die Bilder anzuzeigen.

Googling für "httpandler Bilder" zeigt zahlreiche Beispiele auf, wie man das macht.

Anstatt zu versuchen, direkt mit Ihren Bildern zu verlinken, würden Sie mit dem Handler verlinken, wobei der Querystring bestimmt, welches Bild angezeigt werden soll.

zB
http://mysite.com/MyHandler.ashx?image=myimage.jpg 

Hier ist eine sehr einfache Beispiel (minus Fehlerbehandlung usw.)

using System.IO; 
using System.Web; 
public class MyImageHandler : IHttpHandler 
{ 
    public void ProcessRequest(System.Web.HttpContext ctx) 
    { 

     string _Path; 

     _Path = "E:\\XYZ\\11-01-01 New Year\\" + context.Request.QueryString["image"]; 

     ctx.Response.StatusCode = 200; 
     ctx.Response.ContentType = "image/jpeg"; 
     ctx.Response.WriteFile(_Path);  
    } 

    public bool IsReusable { get {return true; } }   
} 
+0

Warum konvertieren Sie eine Zeichenfolge in eine Zeichenfolge? * context.Request.QueryString ["image"] * gibt bereits eine Zeichenfolge zurück. –

+0

Gute Frage :) änderte es. Danke –

2

Der Client-Browser wird nie wissen, wo diese Bilder sind, wenn Sie ein virtuelles Verzeichnis mit den Bildern zuordnen. In Ihrer lokalen Testumgebung könnten Sie dies umgehen, indem Sie das Bild als "file:///E:/XYZ/11-01-01 New Year/myimage.jpg" referenzieren, aber das ist EXTREM schlecht und wird niemals in einer Produktionsumgebung funktionieren. Sie sollten immer relative Pfade im Arbeitsverzeichnis der Anwendung oder ein statisch definiertes virtuelles Verzeichnis an anderer Stelle verwenden.

+0

yeah ... Ich werde nicht die Datei: // Sache, obwohl es gut zu wissen ist! das ist interessant. Ich könnte einen lokalen Ordner auf meiner Website verfügbar machen, wenn das Durchsuchen des Verzeichnisses aktiviert ist, und dann wird es wie folgt aussehen: mywebsite.com/pictures –

+0

Das klingt nach einer Lösung, die funktionieren sollte, Fairzan. Viel Glück. –

Verwandte Themen