Как конвертировать byte [] в IFormFile в asp.net MVC Core? - PullRequest
0 голосов
/ 08 ноября 2018

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

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

так что на вид у меня есть этот код:

<input type="file" asp-for="BAN_IMAGE_FILE">

на моей модели У меня есть следующее свойство

    public byte[] BAN_IMAGE {get;set;}

    private IFormFile _BAN_IMAGE_FILE;

    [NotMapped]
    public IFormFile BAN_IMAGE_FILE
    {
        get => _BAN_IMAGE_FILE;
        set
        {
            _BAN_IMAGE_FILE = value;

            if (_BAN_IMAGE_FILE != null)
            {
                using (var ms = new MemoryStream())
                {
                    _BAN_IMAGE_FILE.CopyTo(ms);
                    var fileBytes = ms.ToArray();
                    BAN_IMAGE = fileBytes;
                }
            }

        }
    }

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

Что я хочу сделать, так это когда я нажимаю на edit, я хочу получить байтовый массив и преобразовать его в FormFile, чтобы он отображался на экране, какие-либо предложения, как это сделать?

Способ редактирования в контроллере:

public async Task<IActionResult> Edit(int? id)
    {
        if (User.Identity.IsAuthenticated != true)
            return NotFound();

        if (id == null)
        {
            return NotFound();
        }

        var tEvents = await _context.TEVENTS.Include(x => x.BANNERS).Include(x=>x.PHOTO_GALLERY).Include(x=>x.EVENT_TYPES)
            .FirstOrDefaultAsync(x => x.TE_ROWID.Equals(id));

        ViewBag.EvenTypes = GetEventTypes();

        if (tEvents == null)
        {
            return NotFound();
        }
        return View(tEvents);
    }

1 Ответ

0 голосов
/ 14 ноября 2018

Прежде всего, я предлагаю вам использовать viewmodel для типа IFormFile, как написано в >> ДОКУМЕНТАЦИЯ << </a>:

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

@model YourViewModel
(...)
@if (item.AktualnosciImage != null)
            {
//if the file exists in database
                <div style="background-image: url(data:image;base64,@System.Convert.ToBase64String(item.YourViewModelsImageProperty))"></div>
            }
            @if (item.AktualnosciImage == null)
            {

//if the file does not exists in database
                <div style="background-image: url(/img/Aktualnosci/default.jpg)"></div>
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...