Ваш контроллер может выглядеть примерно так:
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 }
});
}
Надеюсь, это ответит на все ваши вопросы!