Как преобразовать byte [] в модель

Я читаю этот отвечать, чтобы загрузить файл с помощью MVC. У меня уже есть файл после InputStream.Read, но я не знаю, как его использовать для создания IEnumerable<MyModel>, поэтому я могу отправить его в базу данных с помощью EF. Это файл CSV, структуру которого я знаю.

public class MyViewModel
{
    [Required]
    public HttpPostedFileBase File { get; set; }
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    byte[] uploadedFile = new byte[model.File.InputStream.Length];
    model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);

    // now you could pass the byte array to your model and store wherever 
    // you intended to store it

    return Content("Thanks for uploading the file");
}

Моя модель:

public class PriceViewModel
{        
    public int PriceId { get; set; }

    public int? YearSelected { get; set; }
    public int? WeekSelected { get; set; }
    public int? StateSelected { get; set; }
}

какова цель IEnumerable <MyModel>? Вы можете напрямую назначить байтовый массив в своем модельном потоке.

Akash KC 02.05.2018 04:32

@AkashKC Вот в чем вопрос. Как я это делаю? Файл представляет собой csv, я знаю структуру, поэтому я думаю, что процесс проверки, предшествующий назначению модели, было бы неплохо добавить, чтобы убедиться, что файл имеет правильную структуру.

Juan Carlos Oropeza 02.05.2018 04:35

Не могли бы вы поделиться своей моделью EF, чтобы мы знали о IEnumerable <MyModel>

Akash KC 02.05.2018 04:39

@AkashKC Готово

Juan Carlos Oropeza 02.05.2018 04:43

Преобразуйте байты в строку, а затем проанализируйте CSV в моделях. Оттуда вы можете проверить данные и сохранить в базе данных. CsvHelper должен в этом сильно помочь

Nkosi 02.05.2018 04:46

@Nkosi Как преобразовать байты в строку? Я знаю, как разбирать строку и все остальное.

Juan Carlos Oropeza 02.05.2018 04:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
753
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Преобразуйте байты в строку

var csv = Encoding.UTF8.GetString(uploadedFile);

а затем проанализируйте CSV в моделях.

CsvHelper должен в этом сильно помочь.

var textReader = new StringReader(csv);
var helper = new CsvHelper(textReader);
IEnumerable<PriceViewModel> records = helper.GetRecords<PriceViewModel>();

Оттуда вы можете проверить данные и сохранить в базе данных.

Хорошо, я пробую это. Но тогда почему по другому вопросу он делает model.File.InputStream.Read

Juan Carlos Oropeza 02.05.2018 04:52

Они копируют байты из потока в массив

Nkosi 02.05.2018 04:53

Хорошо, у меня что-то есть на веревочке. Но мой текст содержит испанские слова, а вместо них буквы с ударением появляются со странными знаками. Я повредил данные во время загрузки или конвертации?

Juan Carlos Oropeza 02.05.2018 04:54

Но File является частью MyViewModel, а не массивом

Juan Carlos Oropeza 02.05.2018 04:56

Вы создали здесь массив byte[] uploadedFile = new byte[model.File.InputStream.Length];, а затем скопировали данные из потока в этот массив.

Nkosi 02.05.2018 04:57

Хорошо, я вижу. Обычно метод влияет на объекты, но в этом случае влияют на параметры?

Juan Carlos Oropeza 02.05.2018 05:00

Для чтения акцентных слов необходимо использовать Encoding.Default. И не мог использовать GetRecords (), потому что не мог соответствовать моей модели, поэтому я просто читал по позиции.

Juan Carlos Oropeza 02.05.2018 06:11

Другие вопросы по теме