从 API 接收时如何处理 blob 存储 url
Posted
技术标签:
【中文标题】从 API 接收时如何处理 blob 存储 url【英文标题】:How to handle blob store url when receive from API 【发布时间】:2021-12-03 13:58:46 【问题描述】:我有一个 API URL(例如:localhost:8080/api/blobs/download/item-id)。 API 本身将返回 Blob 存储中该项目的 URL(例如,https://myaccount.blob.core.windows.net/mycontainer/myitem)。 现在我有一个任务要求用户将 API URL 复制并粘贴到浏览器中,并期望它查看/下载该项目。
问题是Java如何在没有前端帮助的情况下支持用户浏览Blob Store URL?
【问题讨论】:
【参考方案1】:您希望您的 java 应用程序从给定的 URL 下载文件?
不需要用户交互。
参见下面使用 Java NIO 的示例:
Java NIO 包提供了在之间传输字节的可能性 2 个通道,无需将它们缓冲到应用程序内存中。
要从我们的 URL 读取文件,我们将创建一个新的 ReadableByteChannel 来自 URL 流:
ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
从 ReadableByteChannel 读取的字节将被传输到 将要下载的文件对应的FileChannel:
FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME);
FileChannel fileChannel = fileOutputStream.getChannel();
我们将使用 ReadableByteChannel 类中的 transferFrom() 方法 将给定 URL 中的字节下载到我们的 FileChannel:
fileOutputStream.getChannel()
.transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
transferTo() 和 transferFrom() 方法比 只需使用缓冲区从流中读取。取决于 底层操作系统,数据可以直接从 文件系统缓存到我们的文件,而不将任何字节复制到 应用程序内存。
在 Linux 和 UNIX 系统上,这些方法使用零拷贝技术 这减少了内核模式之间的上下文切换次数 和用户模式。
您也可以使用其他库,这可能比单独使用 Java NIO 更好。
参考:https://www.baeldung.com/java-download-file
【讨论】:
谢谢苏珊,我接受了你的回答:)。抱歉,回复太长了。 不用担心@Duy 希望对你有帮助以上是关于从 API 接收时如何处理 blob 存储 url的主要内容,如果未能解决你的问题,请参考以下文章