2015-05-07 4 views
2

Я пытаюсь создать изображение профиля пользователя в проекте ASP MVC5. Я добавил страницу, которая называется changepicture.cshtml, и отобразит изображение текущего пользователя.Показать изображение, загруженное на сервер

У меня есть функция загрузки, которая сделает снимок, который кто-то загрузит, как hank.jpg, и переименуйте его на это users_id.jpg.

Например:

System.Data.Entity.DynamicProxies.ApplicationUser_9C8230B38B954135385F2B0311EAC02ED8B95C4D504F8424BA3ED79B37F0AAAF.jpg

Я хотел бы, чтобы отобразить каждого пользователя индивидуальный рисунок на странице, захватывая там идентификатор пользователя и добавления. jpg, как бы я это сделал?

changepicture.cshtml

@model KidRoutineLogging.Models.ChangePictureViewModel 
@{ 
    ViewBag.Title = "Change Picture"; 
} 

<h2>@ViewBag.Title.</h2> 

<h4>Your Current Picture : @Html.ViewBag.CurrentPicture</h4> 

<img src="@Url.Content("~/uploads/hank.jpg")" /> 

<br /> 
<br /> 
@using (Html.BeginForm("", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 

    <input type="file" name="FileUpload1" /><br /> 
    <input type="submit" name="Submit" id="Submit" value="Upload" /> 
} 


@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

HomeController.cs

public async Task<ActionResult> Index() 
{ 
    foreach (string upload in Request.Files) 
    { 
     var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 

     string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/"; 
     //string filename = Path.GetFileName(Request.Files[upload].FileName); 
     //Request.Files[upload].SaveAs(Path.Combine(path, filename)); 

     Request.Files[upload].SaveAs(Path.Combine(path, user + ".jpg")); 
    } 
    return View(); 
} 
+0

Ваш путь должен быть 'Request.Files [upload] .SaveAs (Path.Combine (путь, user.Id +" .jpg "));'. Я не 100%, какая часть вопроса? Отображение изображения или сохранение изображения с идентификатором пользователя в качестве части имени файла? –

+0

Моя проблема показывает этот загруженный файл. SpruceTips

ответ

3

Вы получаете обалденный типизированных имя файла, потому что вы пытаетесь бросить целый класс (объект) в строку. Кроме того, если вы хотите назвать файл «UserId.jpg», ваш код выполняет больше работы, чем должен.

Эта линия:

var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 

Может быть упрощено до этой линии:

var userId = User.Identity.GetUserId(); 

Это было бы оставить свой окончательный код, как:

public async Task<ActionResult> Index() 
{ 
    foreach (string upload in Request.Files) 
    { 
     var userId = User.Identity.GetUserId(); 
     string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/"; 
     Request.Files[upload].SaveAs(Path.Combine(path, userId + ".jpg")); 
    } 
    return View(); 
} 

Вы можете избавиться от USERID и полностью обновить метод SaveAs до

Request.Files[upload].SaveAs(Path.Combine(path, User.Identity.GetUserId()+ ".jpg")); 

Кроме того - вы действительно должны украсить этот ActionResult атрибутом <HttpPost>, так как он должен обрабатывать POSTING формы и не связан с запросом GET.

+0

Я сделал это изменение, но как бы я захватить идентификатор пользователя на странице cshtml и отобразить изображение? – SpruceTips

+1

Точно так же. ''. Альтернативно вычисляйте URL-адрес изображения в контроллере и передайте его в представление через View Model. –

+0

С этим я получаю ошибку определения для GetUserId(), нужно ли что-то добавить для использования этой функции? – SpruceTips

Смежные вопросы