我正在使用Java来测试blob中存在的项目。我已经有了一个我希望在blob中出现的文件列表。以下是我的maven依赖。
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>1.2.0</version>
</dependency>
我没有从blob获取正确的引用/代码示例来获取特定文件的属性。它唯一的方法是列出所有文件并标识您需要的文件。这是非常昂贵的操作。
我指的是以下文档。
https://docs.microsoft.com/en-us/azure/storage/storage-java-how-to-use-blob-storage#download-a-blob
请帮我一个代码示例,展示如何下载特定文件。
答案 0 :(得分:1)
此代码使您可以从azure blob容器中检索特定文件。
使用以下天青存储版本 maven依赖项
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.6.0</version>
</dependency>
在 spring-boot 配置文件中创建一个 CloudBlobClient bean。
package com.azure.config;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlobClient;
@Configuration
public class AzureBlobConfiguration {
/**
* Cloud blob client.
*
* @return the cloud blob client
* @throws URISyntaxException the URI syntax exception
* @throws InvalidKeyException the invalid key exception
*/
@Bean
public CloudBlobClient cloudBlobClient()throws URISyntaxException, InvalidKeyException {
CloudStorageAccount storageAccount = CloudStorageAccount.parse("Blob-Connection-String-Value");
return storageAccount.createCloudBlobClient();
}
}
使用以下方法 downloadFile 从天蓝色下载特定文件 blob容器并以 byte array 返回文件。
package com.azure.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import org.springframework.beans.factory.annotation.Autowired;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import com.microsoft.azure.storage.blob.CloudBlockBlob;
public class AzureBlob {
@Autowired
private CloudBlobClient cloudBlobClient;
private byte[] downloadFile(String containerName, String filename)throws URISyntaxException, StorageException, IOException {
CloudBlobContainer container = cloudBlobClient.getContainerReference(containerName);
CloudBlockBlob cloudBlockBlob = container.getBlockBlobReference(filename);
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
cloudBlockBlob.download(outputStream);
return outputStream.toByteArray();
}
}
}
答案 1 :(得分:0)
好的,我有一个方法,如下所示,使它工作。没有简单的实现。首先必须导航到目录并使用确切的名称检索文件。
using (var reader = ImageReader.Create("../../../PathForTest.tif"))
using (var maskGen = new ImageGenerator(reader.Width, reader.Height, PixelFormat.Format8bppGrayscale, RgbColor.Black))
using (var drawer = new Drawer())
using (var bitmap = new Bitmap())
{
var graphicsPath = Aurigma.GraphicsMill.AdvancedDrawing.Path.Create(reader.ClippingPaths[0], reader.Width, reader.Height);
drawer.Draw += (sender, e) =>
{
e.Graphics.FillPath(new SolidBrush(new GrayscaleColor(255)), graphicsPath);
};
using (var setAlpha = new SetAlpha(maskGen + drawer))
{
(reader + setAlpha + bitmap).Run();
bitmap.Save("../../../result.tif");
}
}
src:https://softwaretestingboard.com/qna/2197/how-to-download-particular-file-from-azure-blob-using-java