IFormFile Загрузить изображение ASP.NET core MVC - PullRequest
0 голосов
/ 05 ноября 2019

Извините, что беспокою вас, ребята, но у меня есть проблема, которую я не знаю, как решить, и уже несколько дней просматриваю и пытаюсь найти другое решение.

Итак, я создаю веб-сайт, на котором хочуреализовать пользовательский раздел, когда пользователь может загрузить свое личное изображение в виде профиля изображения.

И здесь возникает проблема, которую я поднимаю, когда я запускаю код, он всегда возвращается как ноль.

Здесьмой контроллер:

[HttpPost]
    public async Task<IActionResult> Create(EmployeeCreateViewModel model)
    {

        if (ModelState.IsValid)
        {


            string uniqueFileName = null;
            if(model.Photo != null)
            {
                string uploadsFolder = Path.Combine(_hostingEnvironment.WebRootPath, "EmpImg");
                uniqueFileName = Guid.NewGuid().ToString() + "_" + model.Photo.FileName;
                using(var fs = new FileStream(Path.Combine(uploadsFolder, uniqueFileName), FileMode.Create))
                {
                    await model.Photo.CopyToAsync(fs);
                }


            }
            Employee newEmployee = new Employee
            {
                Name = model.Name,
                Surname = model.Surname,
                Email = model.Email,
                Area = model.Area,
                PhotoPath = uniqueFileName
            };
            _employeeRepository.Add(newEmployee);
            return RedirectToAction("details", new { id = newEmployee.Id });
        }

        return View();

    }

И это мой вид

<form enctype="multipart/form-data" asp-controller="Employee" asp-action="create" method="post">

    <div class="form-group row">
        <label asp-for="Name" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="Name" class="form-control" placeholder="Name..." />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
    </div>

    <div class="form-group row">
        <label asp-for="Surname" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="Surname" class="form-control" placeholder="Surname..." />
            <span asp-validation-for="Surname" class="text-danger"></span>
        </div>
    </div>
    <div class="form-group row">
        <label asp-for="Email" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="Email" class="form-control" placeholder="Email..." />
            <span asp-validation-for="Email" class="text-danger"></span>
        </div>
    </div>

    <div class="form-group row">
        <label asp-for="Area" class="col-sm-2 col-form-label">Location:</label>
        <div class="col-sm-10">
            <select asp-for="Area" class="custom-select mr-sm-2" asp-items="Html.GetEnumSelectList<Area>()">
                <option value="">Please Select..</option>
            </select>
            <span asp-validation-for="Area" class="text-danger"></span>

        </div>
    </div>

    <div class="form-group row">
        <label asp-for="Photo" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <div class="custom-file">
                <input asp-for="Photo" name="Create" class="form-control custom-file-input" />
                <label class="custom-file-label">Choose File...</label>
            </div>
        </div>
    </div>

    <div asp-validation-summary="All" class="text-danger"></div>
    <div class="form-group row">
        <div class="col-sm-2">
            <button type="submit" class="btn btn-primary">Create</button>
        </div>
    </div>
    @section Scripts {
    <script>
        $(document).ready(function () {
            $('.custom-file-input').on("change", function () {
                var fileName = $(this).val().split("\\").pop();
                $(this).next('.custom-file-label').html(fileName);
            });
        });
    </script>
    }
</form>

Когда я пытаюсь загрузить IMG в браузер, он не выдает никаких исключений, он просто не загружает изображение вбаза данных и столбец пустые.

Заранее всем благодарен за любую помощь или совет.

1 Ответ

0 голосов
/ 06 ноября 2019

В вашем представлении Create вы добавляете дополнительное поле name="Create" для Photo, которое приводит к ошибке привязки модели. Вам необходимо сопоставить имя с именем поля модели.

Изменить нижекод от

<div class="form-group row">
    <label asp-for="Photo" class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
        <div class="custom-file">
            <input asp-for="Photo" name="Create" class="form-control custom-file-input" />
            <label class="custom-file-label">Choose File...</label>
        </div>
    </div>
</div>

до

<div class="form-group row">
    <label asp-for="Photo" class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
        <div class="custom-file">
            <input asp-for="Photo" class="form-control custom-file-input" />
            <label class="custom-file-label">Choose File...</label>
        </div>
    </div>
</div>

Модель:

public class EmployeeCreateViewModel
{

    public string Name { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public string Area { get; set; }
    public IFormFile Photo { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...