使用存储帐户密钥从浏览器将文件上载到Wep App

时间:2016-09-20 23:38:20

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

Cleary我不想透露Azure存储帐户密钥

如何在没有浏览器的Azure存储帐户密钥的情况下将本地文件加载到BLOB存储? 或者甚至可以完成?

我从一个胖的.NET客户端获得可以用SAS做到这一点。

Azure File storage

  

我们目前不支持基于AD的身份验证或ACL,但确实如此   将它放在我们的功能请求列表中。目前,Azure存储   帐户密钥用于为文件共享提供身份验证。

这需要一条路 FileUpload Class

data have;
input ID AdmitNum HaveAge;
datalines;          
    1 1 51
    1 2 48
    1 3 51
    1 4 49 
    2 1 53
    2 2 43
    2 3 43
    2 4 43
    2 5 54
   ;
run;

data want;
set have;
by ID;
if _n_ = 1 NeedAge = HaveAge;
if HaveAge > NeedAge then NeedAge = HaveAge;
retain NeedAge;
run;

我不知道如何使用SAS作为上传终点 我无论如何都不会以ASP.NET的方式将文件上传到blob。

1 个答案:

答案 0 :(得分:1)

Azure Blob存储和Azure文件存储之间的一些差异如下:

  • Blob存储可以存储非结构化对象数据(例如文本或二进制数据,例如文档,媒体文件)。
  • 文件存储使用标准SMB协议为旧版应用程序提供共享存储。 Azure文件服务的目标是内部文件处理,这意味着您可以将文件共享安装到云或本地的VM中。 Azure VM可以通过已安装的共享跨应用程序共享文件,而本地应用程序可以通过文件服务REST API访问文件。

有关详细信息,建议您阅读以下教程:

https://blogs.msdn.microsoft.com/windowsazurestorage/2014/05/12/introducing-microsoft-azure-file-service/

SAS :这是一种理想的方法,可以将存储帐户中资源的有限访问权限授予其他客户,而无需公开您的帐户密钥。有关详细信息,请参阅Using Shared Access Signatures (SAS)

根据您的要求,我假设您可以使用Blob存储来存储您的文件。请按照以下步骤实现您的目的:

在容器上生成SAS网址

简单来说,您可以使用Microsoft Azure Storage Explorer创建SAS。有关详细信息,请参阅此turtorial

注意:您需要在blob容器上创建一个具有写入权限的SAS,用于存储上传的文件。

<强> UploadFile.aspx.cs

protected void UploadButton_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        string containerSasUrl = "https://brucechen.blob.core.windows.net/blob-container-01?st=2016-09-21T01%3A59%3A00Z&se=2016-10-01T01%3A59%3A00Z&sp=rw&sv=2015-04-05&sr=c&sig=xGbgBMypxKP%2FBXAHFuzv%2FabqZqjM3W89JYjgf5uvdHo%3D";
        try
        {
            string uploadedFileUrl = string.Empty;
            var file = FileUpload1.PostedFile;
            string blobName = FileUpload1.FileName;
            //Retrieve a reference to a container.
            CloudBlobContainer container = new CloudBlobContainer(new Uri(containerSasUrl));
            //Retrieve reference to a blob named "blobName".
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
            blockBlob.UploadFromStreamAsync(file.InputStream);
            //Retrieve the uploaded file(blob) url
            uploadedFileUrl = blockBlob.Uri.ToString();
        }
        catch (Exception ex)
        {
            //TODO:log
        }
    }
}

此外,您可以管理blob(文件)资源并向其他人提供公共或指定所需的访问级别。为了更好地理解它,您可以参考此tutorial