Лучшие практики по загрузке больших файлов из облака через Restful API - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь создать Restful API для пользователя, чтобы загрузить zip-файл из облачного хранилища через мой API.

Причины для этого:

  1. Для предотвращения прямого доступа к нашему внутреннему облачному хранилищу
  2. Чтобы скрыть используемую технологию (марка хранилища и т. Д.)
  3. Чтобы получить контроль над запросом пользователя (регистрация, проверка)

На моем APi должно быть два способа:

  1. Скачать какБайт [] и возврат

  2. Загрузить как временный файл и прочитать как байт [] и вернуть

public static byte[] GetReportFile(GetReportRequest request, string refId)
{
    //C# byte limit is 2GB
    byte[] file = null;
    try
    {
        var report = ReportDao.GetReport(request.ReportId);
        var tempFilePath = new StorageService().DownloadByUriToTempFile(report.CloudPath);
    }
    catch (Exception ex)
    {
    }
    return file;
}

Для обоих способов требуется загрузкафайл в память или временный файл, дождитесь завершения передачи файла (дождитесь окончания загрузки пользователя или просто доставьте по HTTP ???), а затем освободите память или удалите временный файл.

В случае, если файлимеет размер 2 ГБ (предположим, это достаточно для сервера), есть ли способ минимизировать нагрузку на стороне сервера, может быть что-то вроде загрузки патрона, сохранение только небольшой части используемой памяти.

Заранее спасибо.

Джейми

1 Ответ

0 голосов
/ 20 сентября 2019

Да, один из лучших способов сделать то, что вам нужно, будет:

  1. Разместите файл в private Blobs в учетной записи хранения
  2. Когда вы получите HTTP-запрос нафайл, сгенерируйте токен SAS для BLOB-объекта и верните в ответ только SAS URL файла.Срок действия токена SAS может варьироваться в зависимости от вашего требования, но было бы целесообразно сохранить его на минимальном уровне.
  3. Таким образом, клиент, по сути, получит общедоступный URL-адрес, который будет действителен в течение ограниченного времени, чтобы получить zip-файл без затрат ресурсов ваших служб.
...