2010-07-15 7 views
3

Comment référencer un fichier en dehors du répertoire racine de mon site Web?Fichier de référence en dehors du répertoire du site Web

Par exemple mon site Web est situé à C: \ dev \ TestSite J'utilise ASP.NET avec XSP. La webapp sera déployée sur Apache en utilisant mod_mono. J'ai images dans C: \ images et je voudrais faire:

<img src="C:\images\logo.gif"/> 

Répondre

4

La valeur src de votre tag img va être envoyée au client. Vous devez spécifier ces chemins par rapport à votre racine de document. Votre meilleur pari est de créer un dossier virtuel (dans IIS, alias est l'équivalent apache) pour pointer vers le chemin c:\images puis changer l'étiquette mentionné src chemin comme suit

<img src="/images/logo.gif" /> 

Pour ce faire, dans apache, vous besoin d'un alias dans votre httpd.conf. La ligne ressemble à ceci

Alias /images c:/images 

est ici les docs http://httpd.apache.org/docs/2.0/mod/mod_alias.html#alias

+0

Est-il possible de définir un répertoire virtuel pour qu'il soit indépendant du logiciel du serveur web - disons dans web.config? – Arizona1911

+0

Pas de manière simple. Cela va dans le coeur du serveur, malheureusement. Le problème est que la balise img va entraîner le client à demander un document appelé '/ images/logo.gif'. Vous pourriez avoir envie de quelque chose comme BenAlabaster suggéré ci-dessous et au lieu de faire la balise 'img' pointant directement sur votre fichier, il pourrait aller à' /yourapp/getfile.aspx? C: \ images \ logo.gif'. Cela mettrait la demande dans le contrôle de votre application, mais c'est probablement une mauvaise idée. Vous devez faire attention à ne servir que des fichiers du répertoire 'c: \ images' ... –

+1

Ce message était informatif. J'ai voté. Merci. J'aime cette communauté. – clientbucket

2

Bien qu'il puisse être possible de le faire par une méthode aki, ce n'est pas une bonne idée. Autoriser le compte IIS à accéder aux fichiers/dossiers sur le système de fichiers plus grand serait un gros trou de sécurité potentiel.

La meilleure façon d'y parvenir est d'utiliser les répertoires virtuels IIS. Mettez votre contenu dans des dossiers dédiés à la prise en charge du site, ne faites pas de votre lecteur C: entier un répertoire virtuel.

+0

Comment est-ce que j'accomplirais ceci en utilisant Apache? Je cours Apache avec mod_mono. J'utilise XSP et monodevelop pour le développement. – Arizona1911

+0

Ne sait pas à propos d'Apache - si elle a quelque chose de similaire à des répertoires virtuels qui serait le chemin à parcourir. –

+0

J'ai ajouté une référence à ma réponse ci-dessous sur la façon de faire des répertoires virtuels dans Apache –

2

Vous ne pouvez pas le faire depuis le code HTML de votre page. La page HTML peut uniquement référencer du contenu accessible sur le Web (en ce qui concerne les images, CSS, javascript, etc.). Vous pouvez créer un répertoire virtuel qui pointe vers votre dossier d'images afin qu'il devienne accessible sur le Web.

EDIT:

La façon apache à l'intérieur de votre fichier de configuration.

Alias /images "C:/Images" 

Et un little walkthrough à partir de certains mec.

2

Je vais supposer que C: \ images \ logo.gif est le chemin sur le serveur, et non le chemin sur le client.

L'attribut src est interprété par le client html (c'est-à-dire Internet Explorer). Le client ne peut rien voir en dehors de votre répertoire Web. En fait, le client ne peut voir les choses à l'intérieur de votre répertoire web que si vous lui avez fourni l'autorisation de le faire. Par conséquent, il ne s'agit pas d'un problème ASP.NET, mais plutôt d'un problème d'accès des clients Web aux serveurs Web ... conçu de cette manière pour des raisons de sécurité.

Pour que votre application à utiliser ces images, vous avez deux options qui viennent immédiatement à l'esprit - ni qui est idéal:

  1. Le code ASP.NET (dans le codebehind) va devoir aller chercher le fichier et le diffuser dans le flux html qui est servi au client, ce qui est une tâche plus complexe que ce que je suppose que vous êtes prêt à lancer.Le code ASP.NET (en utilisant System.IO) va devoir aller chercher le fichier à partir de son emplacement d'origine dans C: \ images \ logo.gif et le copier dans un emplacement accessible à l'utilisateur. client - vous pouvez créer un répertoire temporaire, y copier votre image, le diffuser, le supprimer, supprimer le répertoire.

Ces deux éléments sont certainement hacks qui devraient être évitées si possible, mais si vous êtes catégorique que c'est ce que vous voulez faire, cela vous permettra de le faire via votre application ASP.NET. La solution la plus idéale consiste à ajouter C: \ Images en tant que répertoire virtuel à votre racine de document, c'est-à-dire/ImageCentral - de cette façon vous pouvez avoir des images centrales pour plusieurs sites web stockés dans ce répertoire. par les clients pour l'un des sites Web en ajoutant simplement des répertoires virtuels à chacun d'entre eux pointant vers le dossier images central. Comme le fait remarquer DaveSwersky, ne faites pas de répertoires contenant des répertoires virtuels d'informations sensibles, dès que vous ajoutez un répertoire virtuel à un site Web visible en externe, vous donnez aux gens la liberté d'accéder aux informations qui s'y trouvent.

Bonne chance

+0

bonne explication, merci. –

Questions connexes