将Base64图像上载到Azure Blob

时间:2016-12-11 10:42:42

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

我有以下ASPX标记:

<asp:Image ImageUrl="placeholder.png" runat="server" ID="plhdr" />

网页允许用户上传图像,该图像通过JavaScript库处理,然后设置为上述控件的来源。 JavaScript将源设置为Base64字符串,如下所示:

  

数据:图像/ JPEG; BASE64,/ 9J / 4AAQ ...

我在同一页面上有一个功能,用于将显示的图像上传到Azure存储,然后在Azure SQL中添加对它的引用。我在后面的代码中的代码是:

    StorageCredentials creden = new StorageCredentials(accountname, accesskey);
    CloudStorageAccount acc = new CloudStorageAccount(creden, useHttps: true);
    CloudBlobClient client = acc.CreateCloudBlobClient();
    CloudBlobContainer cont = client.GetContainerReference("testcont");
    cont.CreateIfNotExists();
    cont.SetPermissions(new BlobContainerPermissions
    {
        PublicAccess = BlobContainerPublicAccessType.Blob
    });
    CloudBlockBlob cblob = cont.GetBlockBlobReference("cblob");

    var imagesrc = plhdr.ImageUrl;

    cblob.UploadFromFile(@imagesrc);

    var imageUrl = cblob.Uri;
  '/'应用程序中的服务器错误。找不到路径的一部分   'd:\ WINDOWS \ SYSTEM32 \ placeholder.png'。例外细节:   System.IO.DirectoryNotFoundException:找不到部分内容   路径'D:\ Windows \ system32 \ dist \ img \ fling \ space.gif'。

在这一行:cblob.UploadFromFile(@imagesrc);

希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

根据您的说明,我们可以使用UploadFromStream(stream)将图像文件上传到azure存储空间,请尝试使用以下示例代码进行操作。它对我有用。

  CloudBlockBlob cblob = cont.GetBlockBlobReference("testblob");
  var bytes = Convert.FromBase64String(@"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==");// without data:image/jpeg;base64 prefix, just base64 string
  using (var stream = new MemoryStream(bytes))
  {
     cblob.UploadFromStream(stream);
  }