SDK облачного хранилища Azure UploadFromStreamAsync, хранящий 0 байт - PullRequest
0 голосов
/ 15 мая 2019

Я использую метод ASP.NET Core 2.1 Azure Cloud Storage 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");
        }

1 Ответ

1 голос
/ 16 мая 2019

Я проверил это на моей стороне. И это правда, вам нужно установить позицию потока на 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);
        }
    }
...