Загрузите и прочитайте файл Excel, используя ядро ​​.NET MVC - PullRequest
0 голосов
/ 15 марта 2019

Я реализовал алгоритм чтения файла Excel, используя NPOI в .NET Core.Теперь я хочу загрузить файл Excel в веб-приложение и прочитать файл Excel во время загрузки и сохранить его в базе данных.

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

  • Чтобы гарантировать, что пользователь загружает файл .xlsx (не другие файлы)
  • Чтение данных Excel во время загрузки
  • Сохранение данных вбаза данных

1 Ответ

1 голос
/ 24 марта 2019

Ваш контроллер может выглядеть примерно так:

    public ActionResult Import(System.Web.HttpPostedFileBase uploadFile)
    {
        if (uploadFile != null)
            {
                if (uploadFile.ContentLength > 0)
                {
                    var fileExtension = Path.GetExtension(uploadFile.FileName);
                    if (fileExtension.ToLower().Equals(".xlsx"))
                    {
                        BinaryReader b = new BinaryReader(uploadFile.InputStream);
                        int count = uploadFile.ContentLength;
                        byte[] binData = b.ReadBytes(count);
                        using (MemoryStream stream = new MemoryStream(binData))
                        {
                            //call the service layer to read the data from stream
                        }
                     }
                  }
             }
    }

А ваш уровень обслуживания - это то, что вы уже выяснили, используя NPOI для чтения.

На основании данных, которые вы читаетеВ файле Excel ваша модель может выглядеть примерно так:

public class Product
{
    public int ProductID {get; set;}
    public string Name {get; set;}
    public decimal Price {get; set;}
}

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

Наконец, в представлении вы можете получить форму с диалоговым окном загрузки файла и передать файл, загруженный пользователем.Javascript для вызова контроллера может выглядеть примерно так:

function x () {
            var inputdata = null;
            var form = $('#__ImportFileForm');
            var token = $('input[name="__RequestVerificationToken"]', form).val();
            var fd = new FormData();
            fd.append("__RequestVerificationToken", token);
            fd.append("uploadFile", $("#uploadFile")[0].files[0]);
            inputdata = fd;
            inputdata.skipAjaxPrefilter = true;

            $.ajax({
                type: "Post",
                url: url,
                data: inputdata,
                processData: false,
                contentType: false,
                traditional: true,
                async: true,
                success: function(data) { //do what you want },
                error: function(data, ajaxOptions, thrownError) { //do what you want }
            });
}

Надеюсь, это ответит на все ваши вопросы!

...