Excel 文件 (azure blob) 未在 chrome 中下载

Excel file (azure blob) does not download in chrome

Excel 文件存储在 azure blob 容器中。它们在 IE 中下载时没有发生意外,但在 Chrome 中页面显示此消息(在 Canary 中它崩溃):

This file appears corrupt

并提供了一个 link 来下载它,从那时起一切都很好。我试过将内容类型设置为不同的 excel 格式,但结果是一样的。

这是 blob 代码:

  MemoryStream memoryStream = new MemoryStream();
  CreateFile(memoryStream, grid);
  memoryStream.Position = 0;
  var blockBlob = container.GetBlockBlobReference(randomFileName);
  blockBlob.Properties.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  blockBlob.DeleteIfExists();

  var options = new BlobRequestOptions()
  {
      ServerTimeout = TimeSpan.FromMinutes(10)
   };

   try
   {
            blockBlob.UploadFromStream(memoryStream, null, options);
   }
   catch (Exception e)
   {
       _logger.Error("Uploading excel file: Error: {0}",  e.Message);
   }


   return new Uri("https://myblobs.blob.core.windows.net/" + "containername/" + randomFileName);

你错过了blockBlob.SetProperties();

试试这个:

   var blockBlob = container.GetBlockBlobReference(randomFileName);
   blockBlob.DeleteIfExists();
   blockBlob.Properties.ContentType = 
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
   blockBlob.SetProperties(); // This is for commiting changes.

请注意,对于 .xls 个文件,您需要将 content-type 设置为 application/vnd.ms-excel

仅供参考:如果您想更新现有 blob 中的 属性 值,您需要获取当前值,设置我们要更新的 属性 并调用 SetProperties斑点。

示例:

    blob.FetchAttributes();
    blob.Properties.ContentType = "image/png";
    blob.SetProperties();