我正在尝试使用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();
答案 0 :(得分:2)
我认为错误是因为BlobRequestOptions.SingleBlobUploadThresholdInBytes
值而来的。此值实际上指定了可以上载的blob的最大大小,而不会将其分解为块。如果未为此属性指定任何值,则默认值为128MB
。由于您没有明确地设置它并且您的blob大小为40MB
,因此Azure Storage SDK尝试在单个请求中上传此40MB数据,而不会将其分成块,并且该请求以某种方式超时。
要解决此问题,请明确将此值设置为2MB
或4MB
。然后,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的文件。