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

Rails 7:将字节流音频保存到ActiveStorage为MP3遇签名错误

解决Rails 7 ActiveStorage保存二进制音频流的签名错误问题

核心原因

self.audio_data.attach(result)直接传递原始二进制字符串不符合ActiveStorage的参数要求,它需要的是IO类对象或包含io、filename等键的哈希结构,而非纯字节数据。

具体修复步骤

  • 将二进制字节流包装成StringIO对象,同时指定正确的编码格式
  • 用哈希形式传递参数给attach方法,包含io、filename和content_type三个关键项

示例代码:

# 假设result是从API获取的二进制字节流
audio_io = StringIO.new(result)
audio_io.set_encoding(Encoding::BINARY) # 确保二进制编码正确

self.audio_data.attach(
  io: audio_io,
  filename: "generated_speech.mp3",
  content_type: "audio/mpeg"
)

额外注意事项

  • 如果API返回的响应本身是可直接读取的IO对象(比如部分HTTP客户端的response.body),可直接复用,无需转成StringIO
  • 确保文件名后缀与MIME类型匹配,避免后续播放或存储异常
  • 若仍报错,检查IO对象的指针位置,必要时调用audio_io.rewind重置到起始位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:23:16