2017-07-15 4 views
0

J'ai configuré un chemin réseau sur le serveur Web exécutant l'application .net MVC vers un autre serveur utilisé pour le stockage des fichiers téléchargés . Afin de permettre le téléchargement de fichiers sur le chemin réseau via l'application, j'ai modifié le pool d'applications dans IIS afin que l'application ait la permission de télécharger vers elle. Tout cela fonctionne très bien.Comment lire un chemin réseau sur mon serveur à l'aide de l'application mvc asp.net

Afin que l'application puisse lire le fichier lors du chargement d'une page, j'ai créé un répertoire virtuel dans IIS qui apparaît maintenant comme faisant partie du système de fichiers de ce site dans IIS. Comment puis-je accéder et générer un chemin pour cet emplacement dans mon application afin que le chemin puisse être transmis à une base de données, puis l'image chargée plus tard sur une page?

Disons que mon chemin est:

chemin virtuel

est useruploads/image.jpg

Comment puis-je avoir ma demande de reconnaître le chemin virtuel que j'ai créé?

Si vous mettez le répertoire virtuel hors service dans IIS, y a-t-il un moyen pour que mon application accède directement au chemin réseau sur le serveur Web?

modifier - Pour ajouter à ce qui précède, j'ai le chemin réseau mappé dans iis et il montre sous mon site dans iis comme suit:

enter image description here

Je voudrais lire puis de ce répertoire à l'intérieur du asp.net application mvc en utilisant une adresse comme celle-ci ~/useruploads/file.jpg. Si je peux obtenir mon application pour reconnaître ce répertoire virtuel alors je serai capable de lire à partir de celui-ci.

modifier no.2

Ok je pense avoir déterminé la nature de mon problème et je suis beaucoup plus claire. Fondamentalement, j'accède au fichier très bien quand je lier à la page Web. Cependant, je reçois le message 'non autorisé à charger la ressource locale' dans le chrome. Je crois que c'est simplement une question de navigateurs web ne me permettant pas de charger l'image car elle est référencée sur la page avec une adresse locale (le chemin du réseau). En tant que tel, je suis en train d'essayer de créer une action dans l'application pour charger l'image avec Url.Action dirigée vers mon action qui va ensuite convertir l'identifiant en un flux de l'image, par exemple.

À mon avis:

<img src="@Url.Action("image", "files", new { image = Model.image})" alt="name" /> 

Où Mode.image est quelque chose comme dossier \ image.jpg.

Action:

public FileResult image(string id) 
     { 
      var dir = @"\\SERVERNAME\upload\"; 
      var path = Path.Combine(dir, id); 

      return base.File(path, "image/jpg"); 
     } 
+0

"Afin que l'application puisse lire le fichier lors du chargement d'une page, j'ai créé un répertoire virtuel dans IIS qui apparaît maintenant comme faisant partie du système de fichiers de ce site dans IIS" - pouvez-vous expliquer cela? Pourquoi créez-vous un répertoire virtuel pour une zone de stockage de fichiers? Avez-vous un problème de lecture d'un fichier à partir de votre application ASP.net MVC à partir du disque dur Web ou d'un autre disque dur de serveur? – PhillipH

+0

Le chemin réseau sur le serveur Web provient d'un autre serveur, donc un autre disque dur de serveur en tant que chemin réseau sur le serveur Web. Je suis en mesure de télécharger à l'aide de l'adresse \\ serverIP \ useruploads mais je ne peux pas sembler lire à partir du même chemin d'adresse. J'ai besoin d'un chemin que l'application reconnaît, d'où la tentative d'ajouter le répertoire virtuel dans iis pour l'application, puis de demander ici si mon application pouvait "voir" le répertoire virtuel, par exemple. ~/useruploads/file.jpg afin que je puisse le référencer comme ça dans l'application – Rob

+0

Je devrais dire, quand je dis 'lire de cela', je veux dire charger l'image sur une page html en utilisant ce lien via l'application. Ainsi, l'application appelle \\ serverIP \ useruploads \ image.jpg comme l'adresse de l'image à partir de la base de données, mais cela donne une erreur "non autorisé à charger la ressource locale" dans le chrome et ne se charge dans aucun autre navigateur. Ce dont j'ai vraiment besoin, c'est que ce chemin réseau soit mappé à une adresse virtuelle que l'application peut reconnaître, je pense au moins. – Rob

Répondre

0

Donc à la fin de mon problème était que je ne pouvais pas placer l'image sur la page telle qu'elle utilisait une adresse locale sur le serveur qui n'est pas autorisé pour des raisons de sécurité dans les navigateurs . Pour utiliser le chemin réseau que je devais utiliser

<img src="@Url.Action("image", "files", new { image = Model.image})" alt="name" /> 

à mon avis à cette action:

public FileResult image(string id) 
    { 
     var dir = @"\\SERVERNAME\upload\"; 
     var path = Path.Combine(dir, id); 
     string contentType = MimeMapping.GetMimeMapping(path); 

     return base.File(path, contentType); 
    } 

Cette puis renvoie l'image à la page même si cela signifie que l'image ne soit pas mise en mémoire cache.