AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## **使用技术框架** 1、[https://github.com/nervgh/angular-file-upload](https://github.com/nervgh/angular-file-upload) [官方效果演示](http://nervgh.github.io/pages/angular-file-upload/examples/simple/#) 2、EPPlus(能读写Excel 2007/2010文件的开源组件) ## **代码实现** > 如果是多文件上传,是一个一个文件上传 ### **html 前端代码** ~~~ <input type="file" nv-file-select uploader="vm.uploader" > 或 <input type="file" nv-file-select uploader="vm.uploader" class="col-xs-4 btn btn-sm green-meadow" > ~~~ 如果是多文件上传 ~~~ <input type="file" nv-file-select uploader="vm.uploader" multiple class="col-xs-4 btn btn-sm green-meadow" > ~~~ ### **js 代码** ``` // 头部位置 加入FileUploader引用 angular.module('app').controller('xxx', [     '$scope','FileUploader',     function ($scope, fileUploader) { ``` ``` //导入         vm.uploadedFileName = null;         vm.uploader = new fileUploader({             url: abp.appPath + 'Profile/UploadExcel', //上传文件接口             headers: {                 "X-XSRF-TOKEN": abp.security.antiForgery.getToken()             },             queueLimit: 1, //如果是多文件上传 ,注释掉这行             autoUpload: true,             removeAfterUpload: true,             filters: [{                 name: 'customFilter',                 fn: function (item, options) {                     //File type、size check                     var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';                     console.dir(type);                     console.dir(item);                     if ('|vnd.openxmlformats-officedocument.spreadsheetml.sheet|'.indexOf(type) === -1 || item.size > (1048576 * 10)) {                         abp.message.warn('只能上传xlsx后缀的excel文件,并且小于10M');                         return false;                     }                     return true;                 }             }]         }); // 请求成功回调         vm.uploader.onSuccessItem = function (fileItem, response, status, headers) {             if (response.success) {                 var profileFilePath = abp.appPath + response.result.fileName;                 vm.uploadedFileName = response.result.fileName;                 //vm.picFileLists.push(profileFilePath);                 processCheckService.importQCTemp1Excel({ //导入excel数据接口                     path: vm.uploadedFileName                 }).then(function (result) {                     vm.refreshGrid();                     app.notify.success("添加成功", result.config.executeDuration);                 });             } else {                 abp.message.error(response.error.message);             }         }; ``` ### **上传文件接口** 代码位置 : ![](https://img.kancloud.cn/ee/b4/eeb44dce92309c88e9c0060a1a90e16c_349x487.png) ``` public JsonResult UploadExcel()         {             try             {                 //Check input                 if (Request.Files.Count <= 0 || Request.Files[0] == null)                 {                     throw new UserFriendlyException(L("ProfilePicture_Change_Error"));                 }                 var file = Request.Files[0];                 if (file.ContentLength > 1048576 * 10 ) //1MB.                 {                     throw new UserFriendlyException(L("ProfilePicture_Change_Info"));                 }                 //Delete old temp profile pictures                 //AppFileHelper.DeleteFilesInFolderIfExists(_appFolders.TempFileDownloadFolder, "userProfileImage_" + AbpSession.GetUserId());                 //Save new picture                 var fileInfo = new FileInfo(file.FileName);                 var imageFileName = "excel_" + AbpSession.GetUserId() + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + fileInfo.Extension;                 string folderName = _appFolders.ExpressUploadImageFolder + "\\" + DateTime.Now.ToString("yyyy/MM");                 if (!Directory.Exists(folderName))                     Directory.CreateDirectory(folderName);                 var imageFilePath = Path.Combine(folderName, imageFileName);                 file.SaveAs(imageFilePath);                 return Json(new AjaxResponse(new { fileName = "Upload\\" + DateTime.Now.ToString("yyyy/MM") + "\\" + imageFileName ,path = imageFilePath ,fileName2 = imageFileName }));             }             catch (UserFriendlyException ex)             {                 return Json(new AjaxResponse(new ErrorInfo(ex.Message)));             }         } ``` ### **导入数据到数据库** ~~~ public async Task ImportQCTemp1Excel(ImportExcelInput input)         {             List<QCTemp1> strList = GetSheetValues(input.Path);             using (DapperDbContext Context = new DapperDbContext("Default"))             {                 foreach (QCTemp1 qCTemp1 in strList)                 {                     Context.Insert<QCTemp1>(qCTemp1);                 }             }                      }         public IAppFolders AppFolders { get; set; }         /// <summary>         /// 检查excel 表格值是否为空         /// </summary>         /// <param name="value"></param>         /// <returns></returns>         private string CheckCellValue(object value) {             if (value == null)             {                 return "";             }             else             {                 return value.ToString();             }         }         private string GetDoubleCellValue(string value) {             try {                  return double.Parse(value)+"";             }             catch (Exception e) {                 return "";             }         }         private List<QCTemp1> GetSheetValues(string path)         {               var file = new FileInfo(AppFolders.RootPath + path);             if (file == null) return null;             List<QCTemp1> strList = new List<QCTemp1>();             using (var package = new ExcelPackage(file))             {                 ExcelWorksheets worksheets = package.Workbook.Worksheets;                 ExcelWorksheet worksheet = worksheets[1]; // 这个地方必须是1,不是从0 开始                 var columns = worksheet.Dimension.Columns; // row 等于2 是因为第一行是标题行                 for (int row = 2; row <= worksheet.Dimension.Rows; row++)                 {                     QCTemp1 qCTemp1 = new QCTemp1();                     qCTemp1.Id = 0;                     for (int cel = 1; cel <= columns; cel++) // 这里必须是1 不是从0 开始                     {                         switch (cel) {                             case 1:                                 qCTemp1.AddCode = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 2:                                 qCTemp1.AA = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 3:                                 qCTemp1.BB = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 4:                                 qCTemp1.CC = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 5:                                 qCTemp1.DD = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 6:                                 qCTemp1.EE = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 7:                                 qCTemp1.FF = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 8:                                 qCTemp1.GG = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 9:                                 qCTemp1.HH = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 10:                                 qCTemp1.II = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 11:                                 qCTemp1.JJ = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 12:                                 qCTemp1.LL = GetDoubleCellValue(CheckCellValue(worksheet.Cells[row, cel].Value));                                 break;                             case 13:                                 qCTemp1.KK = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 14:                                 qCTemp1.MM = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 15:                                 qCTemp1.NN = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                             case 16:                                 qCTemp1.PP = CheckCellValue(worksheet.Cells[row, cel].Value);                                 break;                         }                     }                     strList.Add(qCTemp1);                 }                 return strList;             }         } ~~~