从 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的主要内容,如果未能解决你的问题,请参考以下文章

从 Spark 写入镶木地板时如何处理空值

应用未运行时如何处理远程通知

使用 Azure 文本翻译 API 时如何处理限制?

单元测试时如何处理 API 调用速率限制?

Vim:在寄存器中存储多个命令时如何处理换行符?

重写“漂亮的 URL”时如何处理变音符号(口音)