我有以下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);
。
希望有人能指出我正确的方向。
答案 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);
}