【发布时间】:2020-12-10 21:26:54
【问题描述】:
我正在开发一个 API(弹簧启动)。其中我需要在 get 方法的响应体中返回 FileInputStream。
预期 - 前端调用get-files API时,浏览器会打开文件下载提示。
问题 - 我们不能使用 blob.downloadToFile 方法,因为它会在本地机器(或托管 API 的地方)下载文件,我们需要一些可以直接发送文件的东西到 API 调用的前端。 但是还有另一种方法 blob.download(),它返回的 OutputStream 不能在 API 调用中返回。
那么有什么方法可以将 OutputStream 转换为 FileInputStream 而无需保存到我们设备上的实际文件中。
示例代码-
public ByteArrayOutputStream downloadBlob() throws URISyntaxException, InvalidKeyException, StorageException, IOException {
String storageConnectionString = "DefaultEndpointsProtocol=https;" + "AccountName=" + accountName + ";"
+ "AccountKey=" + accountKey;
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
final CloudBlobContainer container = blobClient.getContainerReference("container name");
CloudBlockBlob blob = container.getBlockBlobReference("image.PNG");
ByteArrayOutputStream outputStream =new ByteArrayOutputStream();
blob.download(outputStream);
System.out.println("file downloaded");
return outputStream;
}
注意-文件可以是任何类型。
【问题讨论】:
标签: java spring azure cloud blob