仅上传最后一个文件(Azure Blob)

问题描述 投票:1回答:1

我将文件集合以并行方式(在C#中为IFormFiles)上传到blob。

我使用信号量和TPL进行并行上传。 (source

但是除了最后一个文件以外的所有文件仅以64 Kb的速度上传。最新文件已完全上传。

我不知道为什么忽略4Mb的块大小并使用64Kb,为什么只上传1个默认大小的块。

这里是代码:

public static async Task UploadBulkAsync(string storageConnectionString, string containerName, Dictionary<string, IFormFile> blobNameToFile)
    {
        var completed = 0;
        var semaphore = new SemaphoreSlim(AppGlobalSettings.BulkUploadAzureBlobThreadCount, AppGlobalSettings.BulkUploadAzureBlobThreadCount);
        var tasks = new List<Task>();

        var options = new BlobRequestOptions
        {
            ParallelOperationThreadCount = 20
        };

        var blobContainer = await GetContainerAsync(storageConnectionString, containerName);
        await blobContainer.SetPermissionsAsync(new BlobContainerPermissions() { PublicAccess = BlobContainerPublicAccessType.Blob });

        foreach (var one in blobNameToFile)
        {
            var name = one.Key;
            var file = one.Value;

            var blockBlob = blobContainer.GetBlockBlobReference(name);
            blockBlob.Properties.ContentType = file.ContentType;

            await semaphore.WaitAsync();

            tasks.Add(blockBlob.UploadFromStreamAsync(file.OpenReadStream(), null, options, null).ContinueWith(t =>
            {
                semaphore.Release();
                Interlocked.Increment(ref completed);
            }));
        }

        await Task.WhenAll(tasks);
    }
azure azure-storage-blobs azure-blob-storage
1个回答
0
投票

问题出在IFormFile对象的集合中。您不能在同一请求处理中打开多个IFormFile流。它们需要按顺序处理。

链接:Getting "The inner stream position has changed unexpectedly" in AWS Lambda

© www.soinside.com 2019 - 2024. All rights reserved.