【发布时间】:2018-05-26 08:01:11
【问题描述】:
概述:通过 dotnet core 2.0 MVC 将 Excel 电子表格上传到 Azure Blob 存储。尝试流式传输文件以便将其保存到存储中时会发生错误。 using (var stream = new FileStream(file.FileName, FileMode.Open))(下面的代码 - _employerFileAzureService.SaveBlobAsync)。
我已经查看了几个与此相关的 SO 问题,但无法从中找到解决方案。
我已经能够验证以下内容:
- 所选文件正在从浏览器发送到控制器
- blob 容器已正确创建 (C#)
错误
Could not find file 'C:\dev\tfs\Admin.Web\employer-bad.test.xlsx'.
控制器调用
public async Task<IActionResult> Upload(IList<IFormFile> files, CancellationToken cancellationToken)
{
var result = new UploadResultViewModel();
var processResult = new FileProcessingResult();
var errorMessage = new StringBuilder();
var fileName = string.Empty;
var withError = false;
foreach (var file in files)
{
try
{
fileName = file.FileName;
processResult = await ProcessUploadFiledAsync(file, cancellationToken);
}
catch (Exception e)
{
_logger.LogError(e, "Error processing uploaded xslx");
errorMessage.Append($"File: {fileName} errored. Error: {e.Message}");
ModelState.AddModelError("", $"Error uploading file: {fileName} ");
}
}
在容器中设置 blob(失败 _employerFileAzureService.SaveBlobAsync)
private async Task<FileProcessingResult> ProcessUploadFiledAsync(IFormFile file, CancellationToken cancellationToken)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Value.Trim('"');
fileName = RandomizeFileName(fileName);
var eins = new Dictionary<string, string>();
var result = await _employerFileAzureService.SaveBlobAsync(fileName, file);
...
_employerFileAzureService.SaveBlobAsync
public async Task<string> SaveBlobAsync(string fileName, IFormFile file)
{
try
{
var container = await _azureStorageConfigurator.GetBlobContainerAsync();
var blobBlock = container.GetBlockBlobReference(fileName);
using (var stream = new FileStream(file.FileName, FileMode.Open))
{
await blobBlock.UploadFromStreamAsync(stream);
}
var blobUrl = blobBlock.Uri.AbsolutePath;
return $"{_azureStorageConfigurator.BaseStorageUri}{blobUrl}";
}
catch (Exception ex)
{
_logger.LogError($"*** Error Saving to storage: {ex.Message}");
throw;
}
}
【问题讨论】:
标签: c# azure .net-core azure-blob-storage