Azure Blob Storage - MVC Web应用程序-有没有一种方法可以直接上传到Azure Blob St

本文关键字:Azure Blob St 方法 Web MVC Storage 应用程序 有没有 一种 | 更新日期: 2023-09-27 17:52:36

是否有一种方法可以让MVC web应用程序的用户避免在MVC应用程序中上传文件,并最终让应用程序将其传输到存储?

换句话说,web客户端是否可以获得适当的SAS令牌以将其直接上传到Azure Blob Storage中的适当位置?

我已经看到了一个客户端应用程序直接复制到blob存储的例子,但在web应用程序上找不到任何东西。谢谢!

Azure Blob Storage - MVC Web应用程序-有没有一种方法可以直接上传到Azure Blob St

目前这是不可能的,因为Windows Azure存储不支持CORS。然而,在'Build会议的演示中,存储团队表示它即将到来。实现这一目标的一种方法是仅在该存储帐户中托管用于上传的HTML页面,如@viperguyz在链接中提到的,并使用SAS上传该存储帐户中的blobs。如果需要,可以将自定义域映射到blob存储帐户并使用该域名。自定义域名的问题是您将无法使用SSL。

您可以从客户端上传,而无需使用JavaScript触摸MVC站点,我已经写了一篇博客文章,其中包含如何做到这一点的示例http://blog.dynabyte.se/2013/10/09/uploading-directly-to-windows-azure-blob-storage-from-javascript/代码在GitHub

它是基于Gaurav Mantris的例子,并通过在Blob存储上托管JavaScript来工作。

当然——这里有一个例子:

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
    private string UploadFileToBlob(string file)
    {
        // Retrieve storage account from connection string
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        // Create the blob client
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        // Retrieve reference to a previously created container
        CloudBlobContainer container = blobClient.GetContainerReference("mydeployments");
        // Retrieve reference to a blob named "myblob"
        var date = DateTime.UtcNow.ToString("yyyyMMdd-hhmmss-");
        var fileinfo = new FileInfo(file);
        if (fileinfo.Exists)
        {
            var fileToUpload = new FileInfo(file).Name;
            var filename = date + fileToUpload;
            try
            {
                CloudBlob blob = container.GetBlobReference(filename);
                // Create or overwrite the "myblob" blob with contents from a local file
                using (var fileStream = System.IO.File.OpenRead(file))
                {
                    blob.UploadFromStream(fileStream);
                }
                return blob.Uri.AbsoluteUri;
            }
            catch (Exception ex)
            {
                LogError("Error uploading file to blog: ", ex.Message);
                return "";
            }
        }
        LogError("Error - specified file does not exist: ", file);
        return "";
    }