在 azure blob 存储中上传文件

Bip*_*mar 11 c# azure azure-storage-blobs

我正在尝试使用以下代码上传我存储在 MemoryStream 中的文件。

        private static void SaveStream(MemoryStream stream, string fileName)
        {
            var blobStorageService = new BlobStorageService();
            UploadBlob(stream, fileName);
        }

        public void UploadBlob(MemoryStream fileStream,string fileName)
        {
            var blobContainer = _blobServiceClient.GetBlobContainerClient(Environment
                               .GetEnvironmentVariable("ContainerName"));
            var blobClient = blobContainer.GetBlobClient(fileName);
            blobClient.Upload(fileStream);  <--- Error Message

        }

Run Code Online (Sandbox Code Playgroud)

错误消息:System.ArgumentException:“content.Position 必须小于 content.Length。请将 content.Position 设置为要上传的数据的开头。”

Toa*_*yen 23

发生这种情况是因为当前位置位于流的末尾。您可以在上传前将位置设置为流的开头

var blobClient = blobContainer.GetBlobClient(fileName);
fileStream.Position =0;
blobClient.Upload(fileStream)
Run Code Online (Sandbox Code Playgroud)

  • 通俗地解释一下:流是一种单向数据结构,当你一个字符一个字符地读取流时,它的位置开始向前移动。因此,如果您有一个已读取整个文件流的代码,那么它的位置将被移动到末尾。当您尝试执行 fileStream 的上传时 - 它已经读取到最后一个字符,因此上传程序将抛出异​​常,表示没有任何内容可进一步读取。为了解决这个问题 - 我们手动将 fileStream 的位置设置为第 0 个位置,因此 fileStream 再次可以新鲜读取。这就是上传有效的原因! (7认同)
  • 可能值得解释OP的代码有什么问题(即为什么他们收到该消息)。:) (4认同)