编码UI C#-如何将捕获的图像上载到Azure存储容器
从编码的UI测试方法来看,将捕获的图像上载到Azure存储中而不保存在本地驱动器中的方法是什么 要将捕获的图像保存到本地文件中,我将执行以下操作,效果良好:编码UI C#-如何将捕获的图像上载到Azure存储容器,c#,azure,azure-storage,azure-storage-blobs,coded-ui-tests,C#,Azure,Azure Storage,Azure Storage Blobs,Coded Ui Tests,从编码的UI测试方法来看,将捕获的图像上载到Azure存储中而不保存在本地驱动器中的方法是什么 要将捕获的图像保存到本地文件中,我将执行以下操作,效果良好: BrowserWindow window = new BrowserWindow(); Image cml1 = window.CaptureImage(); cml1.Save(screenshotDir + screenshotDirClickMainLinks + "1" + CMLelectAndNaturalGas + Date
BrowserWindow window = new BrowserWindow();
Image cml1 = window.CaptureImage();
cml1.Save(screenshotDir + screenshotDirClickMainLinks + "1" +
CMLelectAndNaturalGas + DateTime.Now.ToString(dateTime) + fileSuffix);
如何将“cml1”上载到Azure存储而不将其保存在本地驱动器中?我是否将cml1转换为可以输入Azure存储对象的流?这看起来有一些信息,但它没有谈到Azure存储。这为CloudBlockBlob提供了“UploadFromStream”方法,但没有给出示例
对于Azure存储,我知道。以下是代码段:
if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
{
// Get the reference of the storage blob
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("testresult");
container.CreateIfNotExists();
CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(localFileName);
cloudBlockBlob.UploadFromFile(sourceFile);
// Uploading second file
CloudBlobContainer container2 = client.GetContainerReference("testresult");
container2.CreateIfNotExists();
CloudBlockBlob cloudBlockBlob2 = container2.GetBlockBlobReference(localFileName2);
cloudBlockBlob2.UploadFromFile(sourceFile2);
}
如何使用“cml1”引用直接将捕获的图像上载到Azure存储中,而不首先将其保存到本地文件夹中
谢谢。从
浏览器窗口返回的输出。CaptureImage
是一个(变量的类型cml1
),您可以使用以下技术将其转换为字节[]
,或者更好,将图像压缩为更简洁的格式,例如.PNG
:
public static byte[] ImageToByte(Image img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
信用证:上述代码直接取自本文件
一旦拥有了byte[]
数组,就可以直接将其上传到Blobstorage
容器中,方法与您尝试过的方法类似,但使用更直接的方法
其中,\u storageAccount
是从Azure存储帐户连接字符串解析的CloudStorageAccount
,containerName
是容器(文件夹)的(小写)名称,key
是图像的唯一文件名,当然,blobToSave
是您刚刚转换的字节数组
性能说明-如果要将多个Blob存储到同一容器引用中,则不希望每次都执行
CreateIfNoteExists(异步)
检查-理想情况下,在启动应用程序或测试时,在引导时执行一次性检查。如果要连续上载大量Blob,则要进一步提高性能,您可以保留并重用blobContainer
引用。如果您打算并行上传,我不能100%确定线程的安全性。非常感谢StuartLC给我的详细答案,我衷心感谢。我将详细检查您的解决方案并更新我的代码。再次感谢StuartLC。我可以在你的帮助下更新我的代码。反应很好!
public async Task SaveBlob(string containerName, string key, byte[] blobToSave)
{
var blobClient = _storageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference(containerName);
await blobContainer.CreateIfNotExistsAsync();
var blockBlob = container.GetBlockBlobReference(key);
await blockBlob.UploadFromByteArrayAsync(blobToSave, 0, blobToSave.Length);
}