2010-03-22 2 views
5

J'ai travaillé sur une application web asp, qui implique que l'utilisateur enregistre les détails d'une personne, y compris une image de la personne. Le nom de fichier des détails/images est stocké dans une base de données SQL avec le nom de fichier de l'image stocké dans une colonne NVARCHAR, plutôt que de stocker l'image réelle dans la base de données.Images ne résolvant pas dans asp webapp (C#)

J'ai créé un répertoire C: \ Images dans lequel les fichiers image seraient stockés par l'application. L'application fonctionne correctement dans la mesure où elle déplace les images vers cet emplacement, mais quand j'ouvre la page qui afficherait les détails/image que l'image ne rend jamais. J'ai contourné cela pendant le développement en faisant stocker l'image dans un dossier qui faisait partie du projet, mais après la publication du projet sur le serveur, l'application refuse de sauvegarder l'image dans les répertoires C:\Inetpub\wwwroot\ .

J'ai donc besoin de savoir pourquoi les images ne seront pas rendues lorsqu'elles sont stockées dans des dossiers qui ne sont pas dans le projet.

J'ai vérifié la source de la page HTML qui indique également l'emplacement correct et le nom du fichier:

img id="ctl00_MainContent_CandidateImage" src="C:\Images\applicant11.jpg" alt="Candidate Image" style="border-width:1px;border-style:solid;height:208px;width:208px;" 

Le code behind affiche l'image dans le code ci-dessous:

// CandidatePhoto filename retrieved from DB. 

CandidateImage.ImageUrl = "C:\\Images\\" + CandidatePhoto; 

Est-ce que quelqu'un a des idées?

À la votre!

Répondre

1

Vérifiez les autorisations sur le dossier sur le serveur. Il se peut que vous l'ayez copié à partir de votre machine dev avec des permissions uniques sur votre ordinateur qui limitent l'accès des autres.

+0

Les autorisations ne seront pas importantes si le lien de l'image pointe vers C: \ – chris

6

Lorsque cela rend le navigateur, vous racontons efficacement à regarder le lecteur C: du client pour l'image à afficher ...

Je ne sais pas pourquoi vous ne pouvez pas enregistrer avec le wwwroot, c'est probablement juste un problème d'autorisations, et pourrait être surmonté, ou vous pourriez créer un répertoire virtuel dans votre site qui pointe vers votre dossier images et utiliser cette URL de répertoire virtuel dans votre page.

+0

Ah je comprends maintenant - me suis confondu en travaillant en exécutant la webapp sur ma machine locale et en l'exécutant sur le serveur en utilisant localhost. J'ai mis à jour les permissions dans wwwroot pour permettre autant que possible et j'ai toujours eu une erreur sur le dossier "~/Images /" n'étant pas enraciné ... Je continuerai à bricoler et mettra à jour quand j'espère résoudre. – gordonk

+0

@gordonk - alors je pense que ce que vous cherchez est Server.MapPath ("~/images") pour obtenir un chemin physique vers le dossier des images. – Paddy

1

Le problème avec votre image est que vous faites référence à un emplacement sur votre ordinateur, au lieu d'une URL relative à l'emplacement du fichier lui-même. Pour que le navigateur puisse rendre l'image, il doit pouvoir accéder à l'URL de cette image. Ce que vous dites au navigateur est de trouver l'image sur l'ordinateur de l'utilisateur, sur le serveur ou ailleurs

+0

L'image est téléchargée à partir du PC des utilisateurs vers le lecteur spécifié sur le serveur, ce qui se passe avec succès. Je n'ai pas précisé cela dans ma question, désolé. – gordonk

3

Vos images devraient être quelque chose comme /images/bob.jpg par rapport à l'application, pas un lecteur OS, même si c'est un chemin virtuel ... mais les images ne seront pas sur le disque C:\ du client dans tous les cas.

Si vous aviez un répertoire virtuel Images/ dans l'application IIS/site, et dirigé vers C:\Images sur le serveur, vos urls se présente comme suit:

CandidateImage.ImageUrl = "~/Images/" + CandidatePhoto; 

To create a virtual directory like this, see here

1

Vous ne pouvez pas mettre le chemin "c: \ images", car lorsque l'image sera rendue, le navigateur va chercher l'image sur la machine client.Vous pouvez faire une de ces deux solutions:

  1. Vous pouvez créer le répertoire «/images » à votre site Web et mettre le site à « usurper l'identité » certains utilisateurs, et définir les autorisations pour cet utilisateur pour lui permettre de écrire dans ce dossier. Et à l'imageUrl vous mettrez quelque chose comme ceci: "/images/image01.jpg".

  2. Vous pouvez créer une page qui rendra l'image pour vous et transmettre un ID de l'image par courrier ou par chaîne de requête. Quelque chose comme "ImageRender.aspx? ID = 123". Et la page va charger l'image de "c: \ images" et écrire l'image à la réponse de la page. Et à votre ImageURL vous mettrez toujours "ImageRender.aspx? ID = [imageID]".

J'espère que cela aide.

1

Merci à tous pour vos idées.

Nous sommes arrivés là en ajoutant le SERVERNAME \ utilisateur IUSER_SERVERNAME avec des autorisations de lecture/écriture à WWWROOT/Images

Ensuite, en utilisant Server.MapPath ("~/images") pour enregistrer les images dans le répertoire sur le serveur

Puis simplement Rendu des images depuis ("~/Images") + CandidatePhoto comme je l'étais auparavant.

Merci encore!

Questions connexes