@Parsifal31017
Программист

Как неявно преобразовать тип «Microsoft.AspNetCore.Http.IFormFile» в «byte[]»?

Здравствуйте, я хочу загружать картинки drag-and-drop, но у меня возникла ошибка "CS0029 C# Не удается неявно преобразовать тип "Microsoft.AspNetCore.Http.IFormFile" в "byte[]"."
@page
@model MyWebSIte.Pages.Company.CreateModel

@{
    ViewData["Title"] = "Create";
}

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer

<link rel="stylesheet" href="/css/create.css">

<div class="container-fluid">
    <div class="container">
        <div class="row">
            <div class="col">
                <h1>@Localizer["Создание"]</h1>

                <h4>@Localizer["Компании"]</h4>
                <hr />
                <div class="row">
                    <div class="col-md-4">
                        <form method="post">
                            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                            <div class="form-group">
                                <label asp-for="Company.Title" class="control-label"></label>
                                <input asp-for="Company.Title" class="form-control" placeholder=@Localizer["Название"] />
                                <span asp-validation-for="Company.Title" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.ReleaseDate" class="control-label"></label>
                                <input asp-for="Company.ReleaseDate" class="form-control" />
                                <span asp-validation-for="Company.ReleaseDate" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Rating" class="control-label"></label>
                                <input asp-for="Company.Rating" class="form-control" placeholder=@Localizer["Рейтинг"] />
                                <span asp-validation-for="Company.Rating" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Bonus" class="control-label"></label>
                                <input asp-for="Company.Bonus" class="form-control" placeholder=@Localizer["Бонус"] />
                                <span asp-validation-for="Company.Bonus" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Description" class="control-label"></label>
                                <input asp-for="Company.Description" class="form-control" placeholder=@Localizer["Описание"] />
                                <span asp-validation-for="Company.Description" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Thematics" class="control-label"></label>
                                <input asp-for="Company.Thematics" class="form-control" placeholder=@Localizer["Тематика"] />
                                <span asp-validation-for="Company.Thematics" class="text-danger"></span>
                            </div>
                            <div class="form-group">//загрузка изображений
                                <div id="dropZone">
                                    Для загрузки, перетащите файл сюда.
                                </div>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Video" class="control-label"></label>
                                <input asp-for="Company.Video" class="form-control" placeholder=@Localizer["Видео"] />
                                <span asp-validation-for="Company.Video" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Topic" class="control-label"></label>
                                <input asp-for="Company.Topic" class="form-control" placeholder=@Localizer["Тема"] />
                                <span asp-validation-for="Company.Topic" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.News" class="control-label"></label>
                                <input asp-for="Company.News" class="form-control" placeholder=@Localizer["Новости"] />
                                <span asp-validation-for="Company.News" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Price" class="control-label"></label>
                                <input asp-for="Company.Price" class="form-control" placeholder=@Localizer["Цена"] />
                                <span asp-validation-for="Company.Price" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <label asp-for="Company.Tags" class="control-label"></label>
                                <input asp-for="Company.Tags" class="form-control" placeholder=@Localizer["Тэги"] />
                                <span asp-validation-for="Company.Tags" class="text-danger"></span>
                            </div>
                            <div class="form-group">
                                <input type="submit" value="Create" class="btn btn-primary" />
                            </div>
                        </form>
                    </div>
                </div>

                <div>
                    <a asp-page="Index">@Localizer["Вернуться к списку"]</a>
                </div>
            </div>
        </div>
    </div>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}


using Microsoft.AspNetCore.Http;

namespace MyWebSIte.Models
{
    public class CompanyViewModel
    {
        public IFormFile Images { get; set; }
    }
}


using Microsoft.AspNetCore.Mvc;
using MyWebSIte.Data;
using MyWebSIte.Models;
using System.IO;
using System.Linq;

namespace MyWebSIte.Pages
{
    public class HomeController : Controller
    {
        ApplicationDbContext _context;

        public HomeController(ApplicationDbContext context)
        {
            _context = context;
        }
        public IActionResult Index()
        {
            return View(_context.Company.ToList());
        }

        [HttpPost]
        public IActionResult Create(CompanyViewModel pvm)
        {
            Models.Company company = new Models.Company { Images = pvm.Images };// здесь возникает ошибка
            if (pvm.Images != null)
            {
                byte[] imageData = null;
                // считываем переданный файл в массив байтов
                using (var binaryReader = new BinaryReader(pvm.Images.OpenReadStream()))
                {
                    imageData = binaryReader.ReadBytes((int)pvm.Images.Length);
                }
                // установка массива байтов
                company.Images = imageData;
            }
            _context.Company.Add(company);
            _context.SaveChanges();

            return RedirectToAction("Index");
        }
    }
}


Как мне исправить эту ошибку?
Заранее спасибо
  • Вопрос задан
  • 577 просмотров
Решения вопроса 1
Неявно нельзя - можно только явно.
// где-то выше IFormFile file
using var fileStream = file.OpenReadStream();
byte[] bytes = new byte[file.length];
fileStream.Read(bytes, 0, (int)file.Length);
// теперь в bytes лежит наш файл
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы