我使用以下代码从 Azure Blob 存储中获取文件,但
downloadedData
始终为空字符串。我引用了这个MS document来从该位置读取文件。该文件不为空并且包含值。我尝试了多种类型的文件 - 文本、pdf 等。但对于所有 downloadedData
都是空的。我该如何解决这个问题?
BlobAsyncClient blobAsyncClient = containerClient.getBlobAsyncClient("abc/file1.txt");
ByteArrayOutputStream downloadData = new ByteArrayOutputStream();
blobAsyncClient.downloadStream().subscribe(piece -> {
try {
downloadData.write(piece.array());
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
});
问题是因为您正在调用异步方法,但没有等待完成。
您可以调用 .blockLast() 方法,或者使用 doOnComplete()。
blobAsyncClient.downloadStream().subscribe(piece -> {
try {
downloadData.write(piece.array());
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}).blockLast();
或
blobAsyncClient.downloadStream().doOnNext(piece -> {
try {
downloadData.write(piece.array());
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}).doOnComplete(() -> {
// This ensures that the downloadData is not accessed until it's fully populated
}).subscribe();