C#在Azure上传一个大文件

时间:2014-06-06 12:49:08

标签: c# file azure upload blob

我需要做一个上传者。所有文件都存储在Azure云中。所以它是“blob”文件。

上传程序正在运行,但只有小文件,当客户端尝试上传大文件(例如视频> 50Mb)时,上传会在3或4分钟后停止。

<!-- language: c# -->
string connectionStr = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionStr);
 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
 // Retrieve a reference to a container. 
 string containerName = this.User.Login;
 containerName = containerName.ToLower();
 CloudBlobContainer container = blobClient.GetContainerReference(containerName);
 //Create the container if it doesn't already exist.
 container.CreateIfNotExists();
 BlobContainerPermissions blobContainerPermissions = new BlobContainerPermissions();
 blobContainerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
 container.SetPermissions(blobContainerPermissions);
 // Retrieve reference to a blob named "myblob".
 CloudBlockBlob blockBlob = container.GetBlockBlobReference("fichiers-" + uploadFile.FileName.ToLower());
 // Create or overwrite the "myblob" blob with contents from a local file.
 using (var fileStream = uploadFile.InputStream)
 {
     blockBlob.UploadFromStream(uploadFile.InputStream);
 }

2 个答案:

答案 0 :(得分:0)

在尝试解决此类问题之前,您应该多考虑一下这种行为。使用Microsoft Azure的一种方法是使用Fiddler。确保您与Azure存储帐户的连接使用HTTP而不是HTTPS,并且只是执行HTTP调用的跟踪。您应该看到有效负载,并查看是否有错误消息返回;您还可以推断重试逻辑(如果有的话),有效载荷的大小等等。

您的问题可能只是Microsoft Azure的一种限制形式,在这种情况下,您可能需要查看一种重试逻辑形式,或者以较小的块分解您的有效负载。

答案 1 :(得分:0)

很可能内存不足:对于非常大的文件,在将它们存储到blob存储之前在服务器上缓冲它们意味着你需要在服务器上有足够的内存来保存文件。更强大的解决方案是将文件从浏览器直接上传到blob存储,并以块的形式上传文件。我发现这篇文章和示例很有帮助,但我确实需要在代码中做一些小修补。

http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/