Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C在Azure上上传一个大文件_C#_File_Azure_Upload_Blob - Fatal编程技术网

C# C在Azure上上传一个大文件

C# C在Azure上上传一个大文件,c#,file,azure,upload,blob,C#,File,Azure,Upload,Blob,我需要上传。所有文件都存储在Azure云中。所以是blob文件 上载程序正在工作,但仅适用于小文件,例如,当客户端尝试上载大于50Mb的大文件视频时,上载会在大约3或4分钟后停止 <!-- language: c# --> string connectionStr = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString; CloudStorageAccount stor

我需要上传。所有文件都存储在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);
 }

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


您的问题可能只是来自Microsoft Azure的一种节流形式,在这种情况下,您可能需要研究一种重试逻辑形式,或者将负载分成更小的块

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


那么错误是什么?Stopped不是一个有用的问题描述。这使得回答非常困难。到目前为止,您是如何解决此问题的?尚不清楚上载是在发送到web服务器时停止,还是在传输到Azure blob存储时停止。你能确认大型上传是在点击你的上传到Azure方法之前还是之后超时吗?它被停止了,因为我认为你正在使用的应用程序服务的请求超时时间大约为3-4分钟。如果请求运行超过3-4分钟,并且您在application insights中也看不到结果和错误消息,则会停止处理该请求。因为您不会得到任何响应,也不会显示在应用程序洞察中。您应该使用PutBlockList并异步发送块,而不是同时发送50mb。我同意查看网络流量可能有助于诊断问题,但如果我怀疑Azure服务器上的内存不足,那么网络流量将无助于解决问题。顺便说一句,你可以用Fiddler查看HTTPS流量;你也可以通过Chrome和IE中的F12工具查看网络流量。