Хобрук: Ваш путь к мастерству в программировании

Проблема при отправке большого двоичного объекта Azure: ReadTimeout вызвала исключение типа System.InvalidOperationException.

Я новичок в Azure. Я использую следующую часть кода для загрузки файла в Azure Blob.

public async Task<byte[]> UploadResultFile(string fileName, byte[] data)
        {

            if (StringUtilities.isBlankOrNull(fileName))
            {
                throw new EmptyStringException("File name cannot be empty or null");
            }
            // Creates a BlobServiceClient object which will be used to create a container client
            BlobServiceClient blobServiceClient = new BlobServiceClient(config.StorageConnectionString);

            // Create the container and return a container client object
            BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(config.ResultContainer);

            // Create a local file in the ./data/ directory for uploading and downloading
            string localFilePath = Path.Combine(Experiment.DataFolder, fileName);

            // Write text to the file 
            // Adding a check to write a data in a file only if data is not equal to null
            // This is important as we need to re-use this method to upload a file in which data has already been written
            if (data != null)
            {
                File.WriteAllBytes(localFilePath, data);
            }

            // Get a reference to a blob
            BlobClient blobClient = containerClient.GetBlobClient(fileName);

            // Open the file and upload its data
            // FileStream uploadFileStream = File.OpenRead(localFilePath);
            using FileStream uploadFileStream = File.OpenRead(localFilePath);
            await blobClient.UploadAsync(uploadFileStream, true);
            uploadFileStream.Close();
            return Encoding.ASCII.GetBytes(blobClient.Uri.ToString());
        }
    }

Но это вызывает проблему с uploadFileStream следующим образом:


uploadFilestream.ReadOut выдал исключение типа System.InvalidOAperationException

uploadFilestream.WriteOut выдал исключение типа System.InvalidOAperationException


Впоследствии консоль выдает следующее исключение:


Операция ввода-вывода была прервана либо из-за выхода потока, либо из-за запроса приложения.

Возникла исключительная ситуация: повторная попытка завершилась неудачно после 6 попыток. (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) System.AggregateException: Повторить попытку не удалось через 6 пытается. (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) (Операция была отменена.) --- ›System.Threading. Tasks.TaskCanceledException: операция отменена. --- ›System.Net.Http.HttpRequestException: ошибка при копировании содержимого в поток. --- ›System.IO.IOException: невозможно прочитать данные из транспортного соединения: операция ввода-вывода была прервана из-за выхода потока или запроса приложения .. ---› System.Net.Sockets.SocketException (995): операция ввода-вывода была прервана из-за выхода потока или запроса приложения.


Мы будем очень благодарны за любую помощь в выявлении и решении проблемы.


  • Какой у вас размер файла? 06.10.2020
  • Размер файла около 7 мб. 06.10.2020

Ответы:


1

Вот как я загружаю, и у меня это работает. Не сказать, что ваш метод не будет работать ... не могу подтвердить или опровергнуть, пока я не скопирую ваш код и не создам приложение на своей машине.

using System;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.RetryPolicies;

namespace My.Repositories
{
    public class BlobStorageRepository
    {
        private readonly CloudBlobContainer _cloudContainer;

        public BlobStorageRepository(string containerName, string connectionStringForStorageAccount)
        {
            CloudStorageAccount storageAccount;
            
            storageAccount = CloudStorageAccount.Parse(connectionStringForStorageAccount);
            var blobClient = storageAccount.CreateCloudBlobClient();
            blobClient.DefaultRequestOptions = new BlobRequestOptions
            {
                // below timeout you can change to your needs
                MaximumExecutionTime = TimeSpan.FromSeconds(30),
                LocationMode = LocationMode.PrimaryThenSecondary
            };

            _cloudContainer = blobClient.GetContainerReference(containerName);
        }

        public int Save<T>(string blobName, byte[] contentBytes) where T : class
        {
            var bytes = contentBytes;
            var blockBlob = _cloudContainer.GetBlockBlobReference($"{blobName}.json");
            blockBlob.Properties.ContentType = "application/json";
            using (var memoryStream = new MemoryStream(bytes))
            {
                blockBlob.UploadFromStream(memoryStream);
            }
            return bytes.Length; // returning the number of bytes uploaded.
        }
    }
}
06.10.2020
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..