【发布时间】:2019-04-29 18:00:08
【问题描述】:
(对于适用于 SDK 10 的 Azure)我可以将文件下载到内存,但我只想将其下载到 blob 或其他本地对象。
【问题讨论】:
标签: java azure azure-blob-storage
(对于适用于 SDK 10 的 Azure)我可以将文件下载到内存,但我只想将其下载到 blob 或其他本地对象。
【问题讨论】:
标签: java azure azure-blob-storage
您可以使用以下示例代码直接获取 blob 内容(而不是本地文件),请尝试一下。
import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import org.apache.commons.io.IOUtils;
import java.io.InputStream;
import java.io.InputStreamReader;
public class GetBlobContent {
public static final String storageConnectionString =
"DefaultEndpointsProtocol=http;" +
"AccountName=***;" +
"AccountKey=***";
public static void main(String[] args) {
try {
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("jay");
CloudBlob blob = container.getBlockBlobReference("test.txt");
InputStream input = blob.openInputStream();
InputStreamReader inr = new InputStreamReader(input, "UTF-8");
String utf8str = IOUtils.toString(inr);
System.out.println(utf8str);
System.out.println("download success");
} catch (Exception e) {
// Output the stack trace.
e.printStackTrace();
}
}
}
【讨论】:
get_blob_to_text 功能。如果您观察到官方文档中提供的下载到文件功能:github.com/twright-msft/azure-content/blob/master/articles/…。它仍然由FileOutputStream 实现。
BlobURL 有一个低级接口,我可以从中提取字节流。这是我的解决方法:
ByteBuffer byteBuffer = blobURL.download(null, null, false, null)
.blockingGet() // DownloadResponse
.body(null) // Flowable<ByteBuffer>
.firstOrError()
.blockingGet();
【讨论】: