Загрузить изображение с помощью .NET Core 2.2 - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть форма, которая отображает текущие данные участника, включая его фотографию.Ниже своего фото он может загрузить другое, и я заменяю старое фото новым в моем контроллере.

Моя проблема в том, что я не могу восстановить изображение в моей модели, оно всегда равно нулю (остальное идет отлично).

В моей модели я объявил переменную Member_UploadPicture типа IFormFile.

Я следовал недавнему учебнику Microsoft (https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.2), но ничегоработает, все еще null.

Я пытался с @Html.Editor с именем переменной, а также с <input type = file>, но 2 всегда нулевые.

У вас есть идея?

Модель

public class MemberViewModel
{
    public string Member_NameFirst { get; set; }
    public string Member_NameLast { get; set; }

    public byte[] Member_Picture { get; set; }
    public IFormFile Member_UploadPicture { get; set; }
    public string Member_Picture_Show { get; set; }

    // other properties...
}

Контроллер

[Authorize(Roles = "Member, Admin")]
[HttpPost]
public async Task<IActionResult> GetMember(MemberViewModel model)
{
    if (ModelState.IsValid)
    {
        var MembertoUpdate = new MemberViewModel
        {
          //code
        };

        using (var memomyStream = new MemoryStream())
        {
            await model.Member_UploadPicture.CopyToAsync(memomyStream);
            MembertoUpdate.Member_Picture = memomyStream.ToArray();
        }
        return Ok(model);
    }
    else return BadRequest();
}

Вид

    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "formAll", style = "margin-top:3%", enctype = "multipart/form-data" }))
    {
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">Personnal</h3>
            </div>
            <div class="panel-body">
                <div id="formMember" class="row col-xs-12">
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

                    <div class="col-xs-6">
                        <div class="form-check-inline col-xs-12" style="margin-top:2%">
                            <img id="ItemPreview" src="data:image/png;base64, @Model.Member_Picture_Show" style="height:200px; width:200px; margin-left:35%; border:solid 1px black">
                        </div>
                        <div class="form-check-inline col-xs-12" style="margin-top:2%; margin-left:35%">
                            @Html.LabelFor(model => model.Member_UploadPicture, "Upload Picture", new { htmlAttributes = new { @id = "test" } })
                            @Html.EditorFor(model => model.Member_UploadPicture, new { htmlAttributes = new { @class = "form-control-file", @id = "Member_UploadPicture" } })
                            <input type="file" class="form-control-file" name="Member_UploadPicture" id="Member_UploadPicture">
                            <small id="fileHelp" class="form-text text-muted">Maximum 1024kb</small>
                        </div>
                    </div>
                </div>
            </div>
        </div>
}

Ajax Call

function Edit() {

    $(function () {
        $("#formAll").submit(function (event) {
            event.preventDefault();

            var formData = $("#formAll").serialize();

            $.ajax({
                url: "https://localhost:44338/Members/GetMember/",
                type: 'POST',
                data: formData,
                dataType: 'json',
                success: function (data) {
                    //code
                },
                error: function (error) {
                    //code
                }
            });
        })
    });
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Для var formData = $("#formAll").serialize();, он не может сериализовать IFormFile, вам необходимо добавить IFormFile к formData.

<script type="text/javascript">
    $(document).ready(function () {
        $("#formAll").submit(function (event) {
            event.preventDefault();

            var formData = new FormData();
            formData.append('Member_NameFirst', $('#Member_NameFirst').val());
            formData.append('Member_UploadPicture', $('#Member_UploadPicture')[0].files[0]);
        $.ajax({
                url: "https://localhost:44307/home/getmember",
                type: 'POST',
                data: formData,
                dataType: 'json',
                processData: false,
                contentType: false,
                success: function (data) {
                    //code
                },
                error: function (error) {
                    //code
                }
            });
        })        })
</script>
0 голосов
/ 18 декабря 2018

удалить

@Html.EditorFor(model => model.Member_UploadPicture, new { htmlAttributes = new { @class = "form-control-file", @id = "Member_UploadPicture" } })

добавить к вам запрос ajax

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