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

如何在Action Text中修改附件图片的磁盘存储尺寸?

解决Active Storage修改原始图片后元数据不匹配的完整性报错

你直接修改磁盘上的图片文件后,Active Storage的Blob记录里存储的元数据(文件大小、校验和)还是旧值,这就导致了完整性校验失败。解决的核心是更新Blob对应的元数据,步骤如下:

1. 重新计算并更新Blob的关键元数据

修改完图片文件后,执行以下代码更新Blob记录:

# 重新读取修改后的文件内容
file_content = File.binread(image_file_path)

# 更新Blob的byte_size和checksum(完整性校验的核心字段)
blob.update!(
  byte_size: file_content.size,
  checksum: OpenSSL::Digest::SHA256.base64digest(file_content)
)

2. (可选)清除图片变体缓存

如果之前为该图片生成过变体(Variants),建议清除旧变体缓存,避免展示过时内容:

# 删除该Blob关联的所有变体记录
blob.variants.delete_all

# 清除对应缓存键下的变体缓存
Rails.cache.delete_matched(/active_storage\/variants\/#{blob.key}/)

更稳妥的文件操作方式(替代直接路径操作)

直接调用service.send(:path_for)属于私有API,未来Rails版本可能变更。推荐用Active Storage官方提供的download/upload方法操作文件,适配所有存储服务(本地、S3等):

# 下载原始文件内容
original_content = blob.service.download(blob.key)

# 处理图片
image = MiniMagick::Image.read(original_content)
processed_image = ImageProcessing::MiniMagick.source(image)
  .resize_to_fit(width, height)
  .call

# 重新上传覆盖原始文件
blob.service.upload(blob.key, processed_image)

# 更新Blob元数据
blob.update!(
  byte_size: processed_image.size,
  checksum: OpenSSL::Digest::SHA256.base64digest(processed_image.read)
)

内容的提问来源于stack exchange,提问作者Johan Donado B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:15:04