Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编码UI C#-如何将捕获的图像上载到Azure存储容器_C#_Azure_Azure Storage_Azure Storage Blobs_Coded Ui Tests - Fatal编程技术网

编码UI C#-如何将捕获的图像上载到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

从编码的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存储对象的流?这看起来有一些信息,但它没有谈到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);
}