【问题标题】:Azure Upload Blob without Page Refresh没有页面刷新的 Azure 上传 Blob
【发布时间】:2015-09-21 23:16:06
【问题描述】:

我正在关注官方 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);
       }

【问题讨论】:

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


    【解决方案1】:

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

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

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

    2. 将文件从用户浏览器上传到 Web 服务器,然后将文件传输到 Blob 存储中。如果您搜索 AJAX 和文件上传,我相信您会找到很多资源,这些资源会告诉您它是如何工作的。

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

    【讨论】:

    • 谢谢高拉夫。实际上,在您发布之前几分钟,我就登陆了您的网站并阅读了那篇文章。内容丰富。但是,它似乎有点复杂..没关系,我会试一试。它在该代码中的何处查找需要上传的文件上传者的文件?
    • 请参阅我的博文中的reader.onloadend 函数。这就是上传魔法发生的地方:)。 Web Application 部分是您想要阅读和理解的内容。
    • 因为它是一个控制台应用程序,在我的情况下,我必须将哪种方法添加到上传按钮单击伴侣?请您使用答案伴侣解释一下吗?主要帮助,高拉夫
    • 现在我很困惑:)。我以为你想在 Web 应用程序中使用它。这个控制台应用程序是从哪里来的?
    • 糟糕,对不起。基本上我的是一个aspx页面,它有一个输入文件控件和一个按钮(仅用于测试目的)。单击按钮时,图像会上传到存储中,但页面会刷新。因此,通过参考您的代码,我可以对我在问题 Gaurav 中发布的现有代码进行哪些更改?我对如何将您的代码添加到我现有的代码中有点困惑:)
    猜你喜欢
    • 2014-03-29
    • 2019-08-24
    • 2011-08-28
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多