Rails 怎样批量上传 avatar

y9info · 2023年03月30日 · 最后由 y9info 回复于 2023年04月04日 · 434 次阅读

已经通过 Active Storage、user.avatar.attach(params[:avatar]) 方式建立了单个 avatar 的上传页面,功能正常。现在假如有 1000 个小学生的图像 avatar 需要上传对应这 1000 个小学生,并且这些图像都命名为 name_id.jpg,能够根据图像找到 user(已经建立了图片和对象的关系),现在不想从前端页面一个一个的上传 avata,有没批量的方法上传这 1000 个图像?想通过 rails seed,或者 RestClient,或 net/http,摸索了很久。

实在不行就只能用 watir 等自动化方式了。

  1. 前段页面可以多选上传
  2. 写个 rake 读本地目录

写个脚本然后用 bin/rails runner path/to/script.rb

https://guides.rubyonrails.org/command_line.html#bin-rails-runner

如果就用这一次,rails c 直接执行也可以

利用 watir 写了一个脚本,从前端直接上传了。如果不用 watir,使用 net/http 的话,对 post update user.avatar 的路由、params[:avatar] 参数、http 文件头等搞不定,还要继续学习网络方面的知识。

按照你的需求,我理解的是需要在 rails c 里执行类似这样的代码(另需异常处理

Dir["avatar_path/*.jpg"].each do |avatar_path|
  user_id = File.basename(avatar_path,".jpg").split("_")[1].to_i
  user = User.find(user_id)
  user.avatar.attach(io: File.open(avatar_path), filename: "#{filename}", content_type: "")
end

@lehf 用你的方法试了一下,是可行的,也上传成功了。同时也找了一下 rails guide,发现其中也有这方面的指导,对应章节是“3.3 Attaching File/IO Objects3.3 附加文件/IO 对象”,非常感谢,在开发前期只注重了功能实现没有特别关注到这里,在应用时,发现很多原始数据、资料需要初始化导入或上传,这方面的功能就需要补足。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号