【问题标题】:How to handle blob store url when receive from API从 API 接收时如何处理 blob 存储 url
【发布时间】: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?

【问题讨论】:

    标签: java spring azure azure-blob-storage


    【解决方案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 希望对你有帮助
    猜你喜欢
    • 2020-08-25
    • 2021-11-19
    • 1970-01-01
    • 2015-05-29
    • 2022-01-13
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多