Загрузить BlockBlob в хранилище Azure с помощью React - PullRequest
0 голосов
/ 09 июня 2019

Мне не удалось получить рабочий пример.В следующем примере показано, что метод createBlockBlob не определен.

Примечание. Я также попытался создать createBlockBlobFromLocalFile и передать его в имени файла, но все равно не повезло.

import React from 'react';
var storage = require('azure-storage');

const CONNECTION_STRING = "MYCONNECTIONSTRING";
const BlockBlobContainerName = "MYCONTAINERNAME";
const BlobName = "MYBLOBNAME";

class NumberUploader extends React.Component {

   render() {
      return (
         <div className="App">
         <input type="file" onChange={ (e) => this.buttonClick(e.target.files[0]) } />
         </div>
      );
   }

   buttonClick(myFile) {
      var blobService = storage.createBlobService(CONNECTION_STRING);
      blobService.createContainerIfNotExists(BlockBlobContainerName, function (error) {
         if (error) {
            console.log("error creating container");
         }
      });
      blobService.createBlockBlobFromBrowserFile(BlockBlobContainerName, BlobName, myFile, function (error, result, response) {
         if (error) {
            alert('Upload failed, open browser console for more detailed info.');
            console.log(error);
         } else {
            setTimeout(function () { // Prevent alert from stopping UI progress update
               alert('Upload successfully!');
            }, 1000);
         }
      });
   }
};
export default NumberUploader;

Редактировать: Visual Studio предоставляетдействительно хороший шаблон веб-приложения под управлением .Net Core, обслуживающий React.Я смог использовать следующий код на сервере, чтобы получить SASToken и передать его в React.Оттуда вы можете использовать метод загрузки файлов браузера с SAS.

    static string GetAccountSASToken()
    {
        // To create the account SAS, you need to use your shared key credentials. Modify for your account.
        const string ConnectionString = "GET_STRING_FROM_STORAGE_ACCOUNT";
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);

        // Create a new access policy for the account.
        SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
        {
            Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
            Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
            ResourceTypes = SharedAccessAccountResourceTypes.Service,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Protocols = SharedAccessProtocol.HttpsOnly
        };

        // Return the SAS token.
        string token = storageAccount.GetSharedAccessSignature(policy);
        return token;
    }

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вот некоторые различия между хранилищем JS v2 и V10 SDK относительно поддержки сценариев браузера:

  1. V10 поддерживает сценарии браузера с npm пакетом и классическим одиночным JS-пакетом ; V2 поддерживает использование браузера только с классическим файлом JS , как в примере с Питером Пэном.

  2. V10 не поддерживает SharedKeyCredential в браузерах, тогда как V2 поддерживает.

Итак, если вы создаете React Web APP и импортируете SDK хранилища, используя зависимость npm. Пожалуйста, используйте V10. Также, пожалуйста, не используйте имя учетной записи и ключ в браузерах, потому что это небезопасно.

1 голос
/ 10 июня 2019

Я вижу, что вы использовали Azure Storage SDK v2 для JavaScript для загрузки файла в React из браузера в хранилище BLOB-объектов Azure.Есть похожая тема SO Как автоматически загрузить папку в Azure? , на которую я ответил с законченным кодом в JavaScript.Я думаю, что это может помочь вам написать код React и заставить его работать в браузере.

В соответствии с вашим описанием и кодами у меня есть несколько советов для вас при использовании Azure Storage JS SDK v2.

  1. Судя по моему опыту, некоторые несовместимы с Node.js и браузером.Поэтому вы не можете использовать метод createBlockBlobFromLocalFile в браузере для загрузки файлов.
  2. Пожалуйста, обратитесь к документу Azure Storage JavaScript Client Library Sample for Blob Operations, чтобы импортировать azure-storage.blob.js в ваш HTML-файл для операций с BLOB-объектами.как показано ниже.

    <script src="azure-storage.blob.js"></script>
    

    или онлайн-версия.

    <script src="https://dmrelease.blob.core.windows.net/azurestoragejssample/bundle/azure-storage.blob.js"></script>
    
  3. Затем вы можете использовать метод createBlockBlobFromBrowserFile в браузере.

Между тем, новая версия Azure Storage JS SDK - v10 , которая, кажется, улучшает совместимость, и вы можете обратить внимание на ее API , помеченные как "ТОЛЬКО ДОСТУПНЫЕ ВNODE.JS RUNTIME "или" ТОЛЬКО ДОСТУПНО В БРАУЗЕРАХ " для различий между Node.js и средой работы браузеров.

Надеюсь, это поможет.

.

...