0

我对 c# 流知之甚少。我正在尝试将 brotli 压缩的 json 上传到 azure 存储中。

private async Task UploadJSONAsync(BlobClient blob, object serializeObject, CancellationToken cancellationToken)
{
  var json = JsonConvert.SerializeObject(serializeObject);
  using (var sourceStream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
  using (var destStream = new MemoryStream())
  using (var brotliStreamCompressor = new BrotliStream(destStream, CompressionLevel.Optimal, false))
  {
    sourceStream.CopyTo(brotliStreamCompressor);
    //brotliStreamCompressor.Close();  // Closes the stream, can't read from a closed stream.

    await blob.DeleteIfExistsAsync();
    await blob.UploadAsync(destStream, cancellationToken);

    //brotliStreamCompressor.Close();  // destStream has zero bytes
    }
  }
}

我确信我缺乏流知识会阻止它工作。

4

1 回答 1

0

为了读取流,我必须将其位置设置回零。

private async Task UploadJSONAsync(BlobClient blob, object serializeObject, CancellationToken cancellationToken)
{
  var json = JsonConvert.SerializeObject(serializeObject);
  using (var sourceStream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
  using (var destStream = new MemoryStream())
  using (var brotliStreamCompressor = new BrotliStream(destStream, CompressionLevel.Optimal, false))
  {
    sourceStream.CopyTo(brotliStreamCompressor);
    brotliStreamCompressor.Close();  
    destStream.Position = 0;

    await blob.DeleteIfExistsAsync();
    await blob.UploadAsync(destStream, cancellationToken);

    }
  }
}
于 2021-07-04T22:33:04.743 回答