Azure 云存储 SDK UploadFromStreamAsync 存储 0 个字节
Posted
技术标签:
【中文标题】Azure 云存储 SDK UploadFromStreamAsync 存储 0 个字节【英文标题】:Azure Cloud Storage SDK UploadFromStreamAsync storing 0 bytes 【发布时间】:2019-10-02 21:32:30 【问题描述】:我正在使用 ASP.NET Core 2.1 Azure 云存储 SDK UploadFromStreamAsync 方法将流上传为 azure blob。 Blob 已创建,但大小显示为 0 字节。下面是我的代码。任何人都可以告诉我我是否遗漏了什么?
[HttpPost]
public async Task<IActionResult> PostRecordedAudioVideo()
var file = Request.Form.Files[0];
if (file.Length > 0)
var stream = new MemoryStream();
await this.Request.Body.CopyToAsync(stream);
CloudStorageAccount storageAccount = null;
CloudBlobContainer cloudBlobContainer = null;
string storageConnectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
cloudBlobContainer = cloudBlobClient.GetContainerReference("screening-videos");
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("TestBlobName");
await cloudBlockBlob.UploadFromStreamAsync(stream);
return Json("Success or failure response");
【问题讨论】:
尝试在上传之前将流的位置重置为0
。更多详情请看这里:***.com/questions/34474850/….
我也试过了:stream.Seek(0, SeekOrigin.Begin);但结果还是一样。
流的长度是多少?
流超过 4 MB,但我认为这不是问题,因为我没有收到任何与流长度相关的错误。我仍然使用以下***帖子中建议的方法增加了控制器操作( [RequestSizeLimit(100_000_000)] )的大小:***.com/questions/38698350/…。但行为仍然没有改变
【参考方案1】:
我已经对它进行了测试。这是真的,您需要在上传之前将流位置设置为0
。
下面是我的示例代码,效果很好。
static void Main(string[] args)
var stream = new MemoryStream();
var sw = new StreamWriter(stream);
sw.Write("adiojaihdhwjfoewjfioghauhfjowpf");
sw.Flush();
stream.Position = 0;
UploadfromstreamAsync(stream).Wait();
static async System.Threading.Tasks.Task UploadfromstreamAsync(MemoryStream stream)
CloudStorageAccount storageAccount = null;
CloudBlobContainer cloudBlobContainer = null;
string storageConnectionString = "connectionstring";
if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
cloudBlobContainer = cloudBlobClient.GetContainerReference("123");
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference("TestBlobName2");
await cloudBlockBlob.UploadFromStreamAsync(stream);
【讨论】:
在我的例子中,代码在面向 .NET 4.6.1 时运行良好。然后,在将其更改为目标 .NET Standard 后,我必须将 Stream 位置设置回 0,否则不会上传任何数据。以上是关于Azure 云存储 SDK UploadFromStreamAsync 存储 0 个字节的主要内容,如果未能解决你的问题,请参考以下文章
windows azure是操作系统吗,它和Windows Azure SDK是啥关系
azure sdk2.5 云服务部署不创建 wad-control-container blob