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

Когда я пытаюсь загрузить файлы в мое хранилище BLOB-объектов, я всегда получаю процент прогресса как 0 или 100. (Нет проблем при загрузке, файлы загружаются точно в мое хранилище. Единственная проблема - с процентом прогресса)

Вот мой код рендеринга, который вызывает метод uploadFiles

    render(){
        if(this.props.files.length > 0)
            this.uploadFiles(this.props.files);
        return (<div></div>);
    }

Вот метод uploadFiles

uploadFiles = (files) => {
        var accountName = this.props.accountName;
        var SasToken = this.props.sasToken;
        var blobUri = 'https://' + accountName + '.blob.core.windows.net';
        var blobService = AzureStorage.Blob.createBlobServiceWithSas (blobUri, SasToken);
        var containerName = 'my-blob';
        Array.from(files).forEach(file => {
            var customBlockSize = file.size > 1024 * 1024 * 32 ? 1024 * 1024 * 4 : 1024 * 512;
            blobService.singleBlobPutThresholdInBytes = customBlockSize;
            var finishedOrError = false;
            var speedSummary = blobService.createBlockBlobFromBrowserFile(containerName, file.name, file, {blockSize : customBlockSize},(error, result, response) => {
                if(error){
                    console.log(error);
                } else {
                    console.log(result);
                    finishedOrError = true;
                    console.log(response);
                }            


            })  
    /*Here when I tried to console, I am always getting process variable value as zero which is declared in refreshProgress() method*/
            function refreshProgress() {
                setTimeout(function () {
                    if (!finishedOrError) {
                        var process = speedSummary.getCompletePercent();
                        console.log('entered',process);
                        refreshProgress();
                    }
                }, 300);
            }

          refreshProgress();

        });
    }

Я ссылался на этот https://dmrelease.blob.core.windows.net/azurestoragejssample/samples/sample-blob.html для загрузки файла на azure. Но часть прогресса мне не ясна.

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

Если вы посмотрите на исходный код speedSummary, вы заметите, что он расширяет EventEmitter и генерирует событие progress. Все, что вам нужно сделать, это подписаться на это событие в вашем коде и вызвать методы, чтобы получить прогресс.

Например, вот псевдокод (не тестировался):

speedSummary.on('progress', function() {
  var percentComplete = speedSummary.getCompletePercent(2);
  console.log('Upload Complete (%): ' + percentComplete);
});
...