c# - 使用 UploadFromStreamAsync 上传文件后 Azure blob 文件损坏

标签 c# azure asp.net-core azure-blob-storage

我尝试使用以下代码将文件上传到 azure blob 容器,但上传的文件已损坏。

 public async void UploadFile(Stream memoryStream, string fileName, string containerName)
    {
        try
        {
             memoryStream.Position = 0;
            CloudBlockBlob file = GetBlockBlobContainer(containerName).GetBlockBlobReference(fileName);
            file.Metadata["FileType"] = Path.GetExtension(fileName);
            file.Metadata["Name"] = fileName;
           await file.UploadFromStreamAsync(memoryStream).ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我该如何解决它。

无法打开使用上述代码上传到 blob 的 Excel 文件。

错误:

enter image description here

     Stream streamData= ConvertDataSetToByteArray(sourceTable); // sourceTable is the DataTable
                     streamData.Position = 0;

UploadFile(streamData,'ABCD.xlsx','sampleBlobContainer'); //calling logic to upload stream to blob

       private Stream ConvertDataSetToByteArray(DataTable dataTable)
            {

                StringBuilder sb = new StringBuilder();
                IEnumerable<string> columnNames = dataTable.Columns.Cast<DataColumn>().
                                                  Select(column => column.ColumnName);
                sb.AppendLine(string.Join(",", columnNames));

                foreach (DataRow row in dataTable.Rows)
                {
                    IEnumerable<string> fields = row.ItemArray.Select(field => (field.ToString()));
                    sb.AppendLine(string.Join(",", fields));
                }

                var myByteArray = System.Text.Encoding.UTF8.GetBytes(sb.ToString());

                var streamData = new MemoryStream(myByteArray);

                return streamData;
            }

最佳答案

上面的代码创建一个 .csv 文件,而不是 .xlsx 文件。您可以通过创建与代码构建类似的内容来轻松测试这一点,例如:

test.txt contents

然后,如果您将其重命名为 .xlsx,以复制您所做的事情,您将得到:

excel result for opening text.xlsx

您有两种解决方案:

  1. 您需要构建一个实际的 .xlsx 文件,可以使用 https://github.com/JanKallman/EPPlus 来完成此操作例如包

  • 您需要将文件另存为 .csv,因为它才是真正的文件。
  • 您将其上传到 azure blob 存储的事实在这里完全无关 - 上传没有问题。

    关于c# - 使用 UploadFromStreamAsync 上传文件后 Azure blob 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901394/

    相关文章:

    c# - 为什么 Array.Sort 在使用 Array.ForEach 后工作得更快?

    authentication - 使用 REST 通过 ACS 对 Microsoft 帐户用户进行身份验证

    node.js - meteor 部署错误

    linux - Linux 上使用 az keyvault 的 Azure secret 下载问题

    javascript - 在 ASP.Net Core MVC View 中刷新 ViewComponent

    c# - 是否可以在 .Net 3.5 中制作的 asp.net core 2.0 中加载程序集

    c# - 在自定义 InvalidModelStateResponseFactory asp.net core 2.2 中读取请求正文

    c# - 我能否以某种方式评估表达式以确定并可能设置为 null 的属性?

    c# - Unity 2d如何在不影响y轴的情况下在x轴上平移+旋转

    c# - 编辑 : NGINX reverse proxy ASP. NET Core 5.0 : localhost:5000 closes connection but www. google.com 有效