EPPLUS 包在本地工作正常,但 returns 部署到 Azure 服务器时出现内部服务器错误

EPPLUS package works fine locally but returns Internal server error when deployed to azure server

我的网站 api 从客户端应用程序上传和读取 excel 文件,然后将数据保存到数据库中,该应用程序在本地服务器上运行良好,但问题来了当应用程序部署到 azure 服务器时,它 returns 错误 500 内部服务器错误因此我不明白为什么会发生这种情况,也不知道我如何跟踪以了解可能是什么原因下面是我的代码块.

My Interface Class

public interface UploadExcelInterface
{
Task UploadMultipleClients(Client obj);
} 

My Service Implementation

public class UploadExcelService : UploadExcelInterface
   {
   private readonly DbContext _connect;
   private readonly IHttpContextAccessor httpContextAccessor;
   public UploadExcelService(DbContext _connect, IHttpContextAccessor httpContextAccessor)
   {
   this._connect = _connect;
   this.httpContextAccessor = httpContextAccessor;
   }

   public async Task UploadMultipleClients(Client obj)
   {
   var file = httpContextAccessor.HttpContext.Request.Form.Files[0];
   if (file != null && file.Length > 0) 
   { 
   var folderName = Path.Combine("Datas", "ClientUPloads");
   var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);
   var fileName   = Guid.NewGuid() + ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
   var fullPath   = Path.Combine(pathToSave, fileName);

   var clientsList = new List<Client>();
   using (var fileStream = new FileStream(fullPath, FileMode.Create)) 
   {
   await file.CopyToAsync(fileStream);
   FileInfo excelFile = new FileInfo(Path.Combine(pathToSave, fileName));
   ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
   using (ExcelPackage package = new ExcelPackage(excelFile))
   {
   ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
   var rowcount = worksheet.Dimension.Rows;
   for (int row = 2; row <= rowcount; row++) 
   {
   var Names   = (worksheet.Cells[row,2].Value ?? string.Empty).ToString().Trim();
   var Address   = (worksheet.Cells[row,3].Value ?? string.Empty).ToString().Trim();
   var Title   = (worksheet.Cells[row,4].Value ?? string.Empty).ToString().Trim();
   var Product     = (worksheet.Cells[row,5].Value ?? string.Empty).ToString().Trim();
   var Order  = (worksheet.Cells[row,6].Value ?? string.Empty).ToString().Trim();
   var Email   = (worksheet.Cells[row,7].Value ?? string.Empty).ToString().Trim();
   var Price = (worksheet.Cells[row,8].Value ?? string.Empty).ToString().Trim();

   clientsList.Add(new Client
   {
   Names   = Names,
   Address = Address,
   Title = Title,
   Product = Product,
   Order  = Order,
   Email   = Email,
   Price = Price,
   }
   }

   //adding clients into the database
   foreach (Client client in clientsList)  
   {
   var exist = _connect.client.Any(x => x.Email == client.Email);
   if (!exist)
   {
   await _connect.client.AddAsync(client);
   }
   }  
   await _connect.SaveChangesAsync();
   }
   }
   }


My Controller Class

[HttpPost]
public async Task UploadMultipleClients([FromForm] Client obj)
{ 
await uploadExcelInterface.UploadMultipleClients(obj);
}
}

请提供有关从服务器获取的此错误的任何帮助,此外,是否可以从 excel 文件中获取数据而不将其上传到服务器,如果可以,如何?因为我尝试将文件添加到内存流并从内存中读取它,但它似乎不起作用,谢谢任何建议。

我的回答可能不能直接帮你解决问题,但可以一步步定位错误。等我们修复错误后,应该就可以在这个线程中解决问题了。

建议

  1. 请确保您的部署内容中包含 EPPlus 库。

  2. Enabling ASP.NET Core stdout log (Windows Server)

  3. Azure App Service - Configure Detailed Error Logging

为什么

经过测试,我确定azure webapp可以支持EPPlus。对于500错误,由于我们没有更具体的错误信息可以参考,所以无法快速定位问题。按照建议的方法,您一定会看到一些有用的信息。

例如:

  1. 未找到 EPPlus 的 class 库。
  2. 未创建数据等文件夹。
  3. 数据库连接字符串,测试环境和生产环境可能不同。 ...