Обслуживание личных файлов напрямую из хранилища BLOB-объектов azure - PullRequest
0 голосов
/ 26 апреля 2020

Мое веб-приложение позволяет пользователям загружать файлы. Для этого я хочу использовать облачное azure хранилище BLOB-объектов.

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

Я полагаю, что это стало возможным в облаке Google с Firebase (Firestorage). Где вы можете загрузить и загрузить прямо с клиента. (Я знаю, что аутентификацией и авторизацией также управляет firebase, так что это облегчает задачу)

Существуют ли подобные механизмы / службы в Azure?

Например, когда пользователь нажимает azure ссылка для загрузки хранилища: триггер проверит JWT на авторизацию, и данные будут отправлены непосредственно клиенту из azure хранилище

1 Ответ

1 голос
/ 26 апреля 2020

Аналогичная опция доступна и для Azure хранилища BLOB-объектов. Вы можете использовать Storage SDK для доступа к контейнерам и получения списка / загрузки большого двоичного объекта

с javascript бэкэндом. Вы можете использовать SAS Token или Azure Storage JavaScript Client. Библиотека также поддерживает создание BlobService на основе ключа учетной записи хранения для аутентификации помимо токена SAS. Однако из соображений безопасности следует использовать токен SAS ограниченного времени, сгенерированный внутренним веб-сервером с использованием политики сохраненного доступа.

Пример здесь

РЕДАКТИРОВАТЬ :

Я не ответил на вопрос полностью выше, однако, если вы хотите получить доступ к хранилищу BLOB-объектов или загрузить какие-либо файлы из хранилища BLOB-объектов, вы можете использовать обычный запрос http get с маркером SAS, созданным с помощью любое JavaScript приложение.

С Angualr:

uploadToBLob(files) {
    let formData: FormData = new FormData();
    formData.append("asset", files[0], files[0].name);
    this.http.post(this.baseUrl + 'insertfile', formData)
      .subscribe(result => console.log(result));
  }

  downloadFile(fileName: string) {
    return this.http.get(this.baseUrl + 'DownloadBlob/' + fileName, { responseType: "blob" })
      .subscribe((result: any) => {
        if (result) {
          var blob = new Blob([result]);
          let saveAs = require('file-saver');
          let file = fileName;
          saveAs(blob, file);
          this.fileDownloadInitiated = false;
        }
      }, err => this.errorMessage = err
      );
  }

Однако рекомендуется (с учетом безопасности) иметь функцию API бэкэнда / Azure для загрузки файла.

...