c# - 当我尝试在 Azure DataLake 中写入文件时,我得到的方法不受支持
问题描述
我正在尝试在系统中以天蓝色写入文件,但出现一个我无法弄清楚的错误。该代码适用于我的环境,但不适用于 zure。
我在不同的环境中尝试了我的代码,除了天蓝色之外,它们都可以工作。
下面是我的代码。
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
await _dlsService.Init();
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation("Processing request: " + requestBody);
CDTO cFile = JsonConvert.DeserializeObject<CDTO>(requestBody);
string filePath = $"{cFile.DataLakeFolder}/{cFile.FileName}";
var summary = _dlsService.GetMetadata(filePath);
//string csvFileName = @"";
try
{
string pathToFile = $"{cFile.DataLakeFolder}/x.xlsx";
using (var str = await _dlsService.CreateFile(pathToFile))
{
using (var streamReader = await _dlsService.OpenStream(filePath))
{
StreamReader sr = new StreamReader(streamReader);
var parser = new CsvParser(sr);
//get the first row of csv as the header
var header = parser.Read();
if (header == null)
return null;
var columns = header.ToList();
//check if there are empty columns
columns.RemoveAll(o => string.IsNullOrWhiteSpace(o));
int i = 1;
using (var report = new Application.Helpers.ExcelReportHelper(str)) // **this line gives me error**
{
report.WriteHeader(columns);
if (i >= 1)
{
//if (parser.read == null) break, else continue to write the excel
//..work work work ...
}
report.Save();
}
}
}
return new ObjectResult(new { fileCreated = pathToFile });
}
catch (Exception ex)
{
log.LogInformation("Processing request: " + ex.Message);
return ErrorHandler.HandleException(ex, log);
}
}
比我的 excelhelper 类是:
class ExcelReportHelper : IDisposable
{
private ExcelPackage _package;
private string _currentQueryName;
public ExcelReportHelper(Stream destStream)
{
_package = new ExcelPackage(destStream); // **this is the line that raises the error**
_package.Workbook.Worksheets.Add("Sheet1");
}
//bla bla bla
//bla bla bla
}
关于如何解决这个问题的任何想法?我非常需要一些帮助。谢谢 :)
PS:这是堆栈跟踪:
{System.NotSupportedException: Specified method is not supported.
at Microsoft.Azure.DataLake.Store.AdlsOutputStream.get_Length()
at OfficeOpenXml.ExcelPackage..ctor(Stream newStream)
at Roar.EnrolService.Application.Helpers.ExcelReportHelper..ctor(Stream destStream) in
C:\Projects\Roar\Roar.Ingestion\Roar.EnrolService\Application\Helpers\ExcelReportHelper.cs:line 16
at
Roar.EnrolService.Functions.FileConversion.FromCsvToExcelFunction.Run(HttpRequest req, ILogger log) in C:\Projects\Roar\Roar.Ingestion\Roar.EnrolService\Functions\FileConversion\FromCsvToExcelFunction.cs:line 66}
解决方案
使用 ExcelPackage 需要您安装 Excel。
可能它适用于您的环境,因为您拥有 Excel,并且在 Azure 中不起作用(不确定您在 Azure 中的哪个位置运行代码),因为代码无法访问那里的 Excel。
推荐阅读
- c++ - Jetson TX2、Arduino Uno 串行通信
- biztalk - 从平面文件模式中提取的每个字符串的新记录
- javascript - Javascript 深度嵌套数组过滤器
- sql - 查询有效约会的条件案例
- azure - 创建自定义 Azure RBAC 角色以允许用户在 portal.azure.com 中交换插槽
- c++ - 如何为 .txt 文件字符串编程不同的输出
- java - Struts2、Guice 和 index.jsp
- php - 如何在服务(Symfony4)中解析 FormBuilder?
- java - Bouncy Castle ECDSA 生成不正确的签名
- c# - 市场数据的正则表达式