L'affichage d'une image téléchargée dans MVC 3 Rasoir
Bien, ce débutant est en train de faire quelque chose de mal lors de l'affichage des images téléchargées sur le serveur:
modèle:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
}
contrôleur (upload - appelé par le [HttpPost] public ActionResult Créer):
public void Upload(Person person)
{
var image = WebImage.GetImageFromRequest();
var filename = Path.GetFileName(image.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads/Fotos"), filename);
image.Save(path);
person.ImageUrl = Url.Content(Path.Combine("~/App_Data/Uploads/Fotos", filename));
}
create view:
...
@using (Html.BeginForm("Create", "Person", FormMethod.Post, new { @encType = "multipart/form-data" }))
{
...
@FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false, includeFormTag: false, uploadText: "image")
...
<div>
<input type="submit" value="Create" /> |
@Html.ActionLink("Back", "Index")
</div>
}
Donc bon, l'image est téléchargé dans le dossier et l'url est enregistré
Maintenant, je veux le voir dans la Vue de Détail
vue de détail:
<div class="display-foto">
<img src="@Url.Content(Server.MapPath(Model.ImageUrl))" alt="IMAGE" />
</div>
Affichage du code généré, tout semble bien se passer:
<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />
Mais le fait est que rien n'apparaît sur l'écran, sauf le texte "IMAGE".
Ce que je fais mal?
P. S. j'ai essayé sans le Serveur.MapPath, à l'aide de l'adresse relative "~\App_Data\Uploads\Fotos_nofoto.jpg" et le résultat est le même.
--- EDIT ---
@kmcc049: j'ai essayé ta suggestion de la création d'un helper
public static class MyHelpers
{
public static IHtmlString MyImage(this HtmlHelper htmlHelper, string url)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var img = new TagBuilder("img");
img.Attributes["alt"] = "[IMAGE]";
img.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext);
return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing));
}
}
l'appel de l'avis:
@Html.MyImage(Model.ImageUrl)
le code généré est
<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />
mais le résultat est le même: pas d'image 🙁
--- RÉSOLU ---
Apparemment le App_Data n'est pas un bon emplacement pour enregistrer les fichiers téléchargés car l'accès aux entraînera une Erreur 403 - Forbidden. J'ai déplacer les fichiers dans ~/Uploads/Fotos et il fonctionne.
OriginalL'auteur Joao | 2011-09-06
Vous devez vous connecter pour publier un commentaire.
Qui n'est pas valide d'un chemin d'accès HTTP. C'est le chemin d'accès au dossier sur votre ordinateur.
essayer le
UrlHelper.GenerateContentUrl()
plutôt la méthodehttp://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.generatecontenturl.aspx
Un autre essai:
@{ var imgPath = UrlHelper.GenerateContentUrl(Model.ImageUrl, this.ViewContext.HttpContext); } <img src="@Url.Content(imgPath)" alt="[IMAGE]" />
Même résultat: [IMAGE]OriginalL'auteur kmcc049