【问题标题】:Is stream Reading can make and send Null to blob storage流读取是否可以生成 Null 并将其发送到 blob 存储
【发布时间】:2016-04-01 04:49:03
【问题描述】:

我对文件使用流:内存流,流读取或文件流,例如

byte[] buff = System.IO.File.ReadAllBytes(open.FileName);
System.IO.MemoryStream ms = new System.IO.MemoryStream(buff);

我想将它发送到 blob 存储,此时我的 blob 是空的,是因为按流读取文件还是指其他问题,例如 blob 或 CloudStorageAccount 连接字符串上的未配置配置。

【问题讨论】:

  • 对不起,但是...您的问题到底是什么?没看懂。
  • 您的流是否可能位于末尾?在调用上传方法之前尝试执行ms.Position = 0。 HTH。
  • @DavidMakogon 我尝试调用流读取,一次是我想在 Blob 中上传,另一次是我想在存储到 Blob 存储之前对文件进行一些修改。我没有内容,我认为这是因为调用流读取两次。而且我必须在上传文件之前写一行代码才能将文件的指针移回开头并使位置为零
  • @GauravMantri 非常感谢,我认为您所说的完全正确。在某些情况下,我想调用两次流读取,并且必须在将文件上传到存储之前移动指针的位置: file.InputStream.Seek(0, SeekOrigin.Begin);或 memorystream.Position = 0

标签: c# azure azure-storage azure-web-app-service azure-blob-storage


【解决方案1】:

在您开始从该流上传到 blob 之前,请确保您的流位于 0。如上面的 cmets 所述,您可以尝试以下方法:

ms.Position = 0

ms.Seek(0, SeekOrigin.Begin)

【讨论】:

    【解决方案2】:

    只需使用以下代码。无需转换内存流,您可以使用 Blob.UploadfromStream 方法将流传递到 blob 存储。

    StorageCredentials creds = new StorageCredentials(
                    ConfigurationManager.AppSettings["accountName"],
                    ConfigurationManager.AppSettings["accountKey"]
                    );
                CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
                CloudBlobClient client = account.CreateCloudBlobClient();
                CloudBlobContainer contain = client.GetContainerReference("your container name");
                contain.CreateIfNotExists();
        CloudBlockBlob blob = contain.GetBlockBlobReference("your blob name");
        using (var stream = System.IO.File.OpenRead("your file"))
                        blob.UploadFromStream(stream);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 2014-08-28
      • 2016-12-02
      • 2020-07-30
      • 2018-07-05
      • 2021-04-18
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多