Azure上载Blob没有页面刷新

时间:2015-07-04 07:38:32

标签: c# asp.net azure file-upload azure-storage-blobs

我正在关注官方Azure Blob上传文档,并且我成功实现了blob上传功能。然而,页面在上传后刷新,我需要以上传图像的方式进行刷新而不必刷新页面。基本上没有回发。

这是我到目前为止所拥有的:

       if (profile_pic_input.HasFile)
       {
                var image = Request.Files["profile_pic_input"];

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
                CloudBlobClient blobStorage = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer container = blobStorage.GetContainerReference("photos");
                if (container.CreateIfNotExists())
                {
                    // configure container for public access
                    var permissions = container.GetPermissions();
                    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
                    container.SetPermissions(permissions);
                }


                String tempName = GeneratePictureName();
                string uniqueBlobName = string.Format("photos/image_{0}{1}", tempName, Path.GetExtension(image.FileName));
                CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);



                blob.Properties.ContentType = image.ContentType;
                blob.UploadFromStream(image.InputStream);
       }

1 个答案:

答案 0 :(得分:2)

要避免回发,您需要使用AJAX。大多数常见的JavaScript框架(如jQuery)都支持这一点。

现在使用AJAX将文件上传到blob存储中,基本上有两种方法可以做到:

  1. 从用户浏览器直接上传到Blob存储:如果您的用户使用支持HTML5的现代浏览器,那么他们可以直接将文件从本地计算机上传到blob存储。有关详细信息,请参阅此链接:https://msdn.microsoft.com/en-us/library/azure/hh824678.aspx。基本上,您要做的是创建一个至少具有Shared Access Signature权限的Write,并允许从您的Web应用程序到您的存储帐户的跨源请求(CORS)。这样,文件就会直接传输到您的存储帐户。我还写了一篇关于你可能觉得有用的博客文章:http://gauravmantri.com/2013/12/01/windows-azure-storage-and-cors-lets-have-some-fun/

  2. 将用户浏览器中的文件上传到您的网络服务器,然后将文件传输到blob存储。如果你搜索AJAX和文件上传,我相信你会发现很多资源会告诉你它是如何工作的。

  3. 我的建议是使用选项#1,因为它更快,并且不会使您的Web服务器过载。