从编码的 UI 测试方法中,将捕获的图像上传到 Azure 存储而不保存在本地驱动器中的方法是什么?
要将捕获的图像保存到本地文件中,我正在执行以下操作,效果很好:
BrowserWindow window = new BrowserWindow();
Image cml1 = window.CaptureImage();
cml1.Save(screenshotDir + screenshotDirClickMainLinks + "1" +
CMLelectAndNaturalGas + DateTime.Now.ToString(dateTime) + fileSuffix);
如何将“cml1”上传到 Azure 存储而不将其保存在本地驱动器中?我是否可以将 cml1 转换为可以输入到 Azure 存储对象的流?这个link看起来有一些信息,但它没有谈论 Azure 存储。这个link CloudBlockBlob 有“UploadFromStream”方法,但没有给出示例。
对于Azure存储,我知道how to create a container and upload a local file into that container 。这是代码段:
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 存储而不先将其保存到本地文件夹中?
谢谢。
最佳答案
从 BrowserWindow.CaptureImage
返回的输出是 System.Drawing.Image
(变量 cml1
的类型),您可以使用 described here 等技术将其转换为 byte[]
,或者更好,将图像压缩为更简洁的格式,例如 .PNG
:
public static byte[] ImageToByte(Image img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
信用:以上代码直接取自此 StackOverflow answer here
获得 byte[]
数组后,您可以直接将其上传到 Blobstorage
容器,方法与您尝试过的类似,但使用更直接CloudBlockBlob.UploadFromByteArrayAsync
method .
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);
}
其中 _storageAccount
是从 Azure 存储帐户连接字符串解析的 CloudStorageAccount
,containerName
是容器(文件夹)的(小写)名称),key
是图像的唯一文件名,当然 blobToSave
是您刚刚转换的字节数组。
性能说明 - 如果您将多个 blob 存储到同一个容器引用,则您不会希望每次都执行 CreateIfNotExists(Async)
检查 - 理想情况下,执行一次性检查在启动应用程序或测试时的引导时间。
关于c# - 编码 UI C# - 如何将捕获的图像上传到 Azure 存储容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378398/