Сохранение / получение изображений. ASP.NET MVC - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь отобразить изображения, которые я загружал ранее, но безуспешно. Изображения загружены, это точно. Пока я написал что-то вроде этого:

@if(Model.AttachedInformation.Count > 0)
{
    <div id="gallery">
        @foreach(var path in Model.AttachedInformation)
        {
            <img src="@path" alt="default_description" title="some_title" />
        }
    </div>
}

AttachedInformation - это просто ICollection<String> объект.

Но это дает мне только границы изображений. Кроме того, я проверил @path переменную, и она действительно хранит полные пути к файлам.

Предложения приветствуются! Спасибо!

РЕДАКТИРОВАТЬ: КОНТРОЛЛЕР

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Employee employee, IEnumerable<HttpPostedFileBase> files)
{
    if(ModelState.IsValid)
    {
        var filepath = String.Empty;

        foreach(var file in files)
        {
            if(null != file && file.ContentLength > 0)
            {
                filepath = Path.Combine(
                    HttpContext.Server.MapPath("~/Content/Images/Uploads"),
                    Path.GetFileName(file.FileName)
                );
                file.SaveAs(filepath);
                employee.AttachedInformation.Add(filepath);
            }
        }                

        this.repository.Add(employee);

        return Redirect("/");
    }
    else
    {
        return View(employee);
    }
}

MODEL

AbstractEntity сохраняет свойства Version и ID.

[Serializable]
public class Employee : AbstractEntity<Employee>, IAggregateRoot
{
    public Employee()
    {
        this.AttachedInformation = new HashSet<String>();
    }

    public virtual String FirstName { get; set; }
    public virtual String MiddleName { get; set; }
    public virtual String LastName { get; set; }
    public virtual String SSN { get; set; }
    public virtual String EmployeeNumber { get; set; }
    public virtual String TradeUnionNumber { get; set; }
    public virtual String Department { get; set; }
    public virtual String Post { get; set; }
    public virtual DateTime DateOfHire { get; set; }
    public virtual DateTime DateOfBirth { get; set; }
    public virtual ICollection<String> AttachedInformation { get; set; }
}

VIEW

Представление содержит несколько input с именем files, например:

<input type="file" name="files" id="additional" class=" " accept="image/jpeg,image/png,image/gif" />

RAW HTML

<div id="gallery">
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Desert.jpg" alt="default_description" title="some_title" />
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Hydrangeas.jpg" alt="default_description" title="some_title" />
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Jellyfish.jpg" alt="default_description" title="some_title" />
    <img src="D:\Programming.Projects\BOA\branches\BOA.PresentationLayer\Content\Images\Uploads\Koala.jpg" alt="default_description" title="some_title" />
</div>

BOUNTY

Мне нужно получить иллюстрированный пример (это работает). Спасибо!

Ответы [ 2 ]

4 голосов
/ 03 марта 2012
HttpContext.Server.MapPath("~/Content/Images/Uploads")

Выше приведен полный путь к диску, который вы затем сохраните в записи сотрудника. Вам просто нужно сохранить имя файла и затем найти изображение в ~ / Content / Images / Uploads /

Еще одно замечание: вы сохраняете все изображения в одном каталоге по имени файла. Если два пользователя загрузят файл с одинаковым именем, один перезапишет другой. У каждого сотрудника должен быть свой каталог загрузки, или вы должны динамически генерировать имена файлов.

1 голос
/ 06 марта 2012

Хорошо. Я нашел решение. Может быть, это кому-нибудь пригодится.

var directory = "/Content/Images/Uploads/" + employee.SSN;
var path = String.Empty;

if(!Directory.Exists(Server.MapPath(directory)))
{
    Directory.CreateDirectory(Server.MapPath(directory));
}

foreach(var file in files)
{
    if(null != file && file.ContentLength > 0)
    {
        path = Path.Combine(directory + "/", Path.GetFileName(file.FileName));
        file.SaveAs(Server.MapPath(path));
        employee.AttachedInformation.Add(path);
    }
}

Это работает для меня. Исправления приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...