You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ruby代码直接从Blob URL下载PDF文件?

用Ruby直接获取Blob URL对应的PDF文件

Blob URL的本质限制

  • Blob URL(如blob:https://dev.myapp.com/ba853441-d1f7-4595-9227-1b0e445b188b)是浏览器为当前会话生成的本地内存引用,仅在创建它的浏览器实例中有效
  • 外部HTTP客户端(比如OpenURI、Net::HTTP)无法直接请求这类URL,因为它不指向服务器上的资源,而是浏览器内存中的临时数据

可行解决方案:Ruby结合浏览器自动化

因为不能依赖本地磁盘操作,我们可以用Ruby调用浏览器自动化工具(如Selenium),在同一个浏览器会话中获取Blob内容,直接在内存中处理。

步骤1:安装依赖

gem install selenium-webdriver

同时确保环境中安装了对应浏览器的驱动(如ChromeDriver,可通过包管理器或官方渠道安装)

步骤2:代码实现

require 'selenium-webdriver'
require 'base64'

# 配置Chrome浏览器,可选无头模式(后台运行)
chrome_options = Selenium::WebDriver::Chrome::Options.new
chrome_options.add_argument('--headless=new')

# 初始化浏览器会话
driver = Selenium::WebDriver.for :chrome, options: chrome_options

begin
  # 先访问生成Blob URL的原始页面(必须在同一会话中,Blob才有效)
  driver.get('https://dev.myapp.com/生成Blob的页面地址') # 替换为实际页面URL

  # 替换为你要处理的Blob URL
  target_blob_url = 'blob:https://dev.myapp.com/ba853441-d1f7-4595-9227-1b0e445b188b'

  # 执行JavaScript获取Blob的二进制数据(转成Base64传给Ruby)
  base64_pdf_content = driver.execute_script(<<~JS_SCRIPT)
    async function fetchBlobAsBase64(blobUrl) {
      const response = await fetch(blobUrl);
      const blob = await response.blob();
      return new Promise((resolve) => {
        const reader = new FileReader();
        reader.onload = () => resolve(reader.result.split(',')[1]);
        reader.readAsDataURL(blob);
      });
    }
    return fetchBlobAsBase64('#{target_blob_url}');
  JS_SCRIPT

  # 将Base64转换为二进制PDF数据
  pdf_binary_data = Base64.decode64(base64_pdf_content)

  # 这里可以直接对pdf_binary_data进行内存级处理,比如:
  # - 传给其他API接口
  # - 用Ruby的PDF库(如Prawn、PDF::Reader)解析内容
  # - 写入内存流而非本地文件

  puts "成功获取到PDF二进制数据,大小:#{pdf_binary_data.size} 字节"
ensure
  # 关闭浏览器会话
  driver.quit
end

关键说明

  • 必须在生成Blob URL的同一个浏览器会话中访问它,否则Blob URL会失效
  • 所有操作都在内存中完成,不需要下载到本地磁盘,符合项目要求
  • 无头模式适合在服务器或无界面环境中运行,若需要可视化调试可去掉--headless=new参数

内容的提问来源于stack exchange,提问作者Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:20:42