无法将文件上传到Azure Storage C#?

时间:2018-05-06 09:06:52

标签: c# azure azure-storage

我正在尝试使用C#轻松上传到Azure存储。它适用于小文件,但是当我尝试上传40mb的文件时,它就不会上传。我被困在上传大约20分钟,然后我最终取消了通话。

write(2, 3, "file1.csv", "C:/Users/rofl/Desktop/")

我有一个体面的互联网,所以我确信上传只有40mb不能上传超过20分钟。最难的部分是,我不知道我得到了什么错误。我尝试在存储中手动上传,大约2分钟就完成了。

编辑:我一直等到收到回调并收到此错误。

错误:

var storageConnectionString = "XXXXXXX";
            var storageAccount = CloudStorageAccount.Parse(storageConnectionString);
            var blobClient = storageAccount.CreateCloudBlobClient();

            //Gets the folder with the MediaID
            CloudBlobContainer videoscontainer = blobClient.GetContainerReference("TestFolder");

            CloudBlockBlob videofile = videoscontainer.GetBlockBlobReference(("test" + ".mp4"));


            //Save blob contents to a temp video file.
            var videostream = new FileStream(@"XXXXXX.mp4", FileMode.Open, FileAccess.Read);
            videofile.UploadFromStream(videostream);
            videostream.Close();

1 个答案:

答案 0 :(得分:2)

我认为错误是因为BlobRequestOptions.SingleBlobUploadThresholdInBytes值而来的。此值实际上指定了可以上载的blob的最大大小,而不会将其分解为块。如果未为此属性指定任何值,则默认值为128MB。由于您没有明确地设置它并且您的blob大小为40MB,因此Azure Storage SDK尝试在单个请求中上传此40MB数据,而不会将其分成块,并且该请求以某种方式超时。

要解决此问题,请明确将此值设置为2MB4MB。然后,SDK将以20(或10)个块的形式破坏您的40MB文件并上传这些块。

这是我使用的代码:

        var cred = new StorageCredentials(accountName, accountKey);
        var account = new CloudStorageAccount(cred, true);
        CloudBlobClient client = account.CreateCloudBlobClient();
        client.DefaultRequestOptions = new BlobRequestOptions()
        {
            SingleBlobUploadThresholdInBytes = 2 * 1024 * 1024
        };
        var container = client.GetContainerReference("myblobcontainer");
        container.CreateIfNotExists();
        var filePath = @"Full File Path";
        var blob = container.GetBlockBlobReference("blob name.exe");
        using (var fs = new FileStream(filePath, FileMode.Open))
        {
            blob.UploadFromStream(fs);
        }

我使用此代码上传了大约60MB的文件。