首页 / RUBY / ruby基本图片上传
ruby基本图片上传
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ruby基本图片上传,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1984字,纯文字阅读大概需要3分钟。
内容图文
图片上传问题
在我们的项目里,需要实现海报的图片上传,便于更好地向外界展示一个社团活动的基本内容,但是在处理中间件相关问题时遇到了一点小小的挫折。不过这并不要紧,OSS对象存储服务固然好,但是本着交完作业就不去维护的宗旨鉴于我们的用户基数不大,用本地存储这些图片也是可行的。
使用用 CarrierWave 处理图像上传
首先在在 Gemfile 文件中添加 CarrierWave
# For picture upload,you can choose the suitable version by yourself
gem 'carrierwave', '1.2.0'
gem 'mini_magick', '4.7.0'
gem 'fog-aws', '2.0.0'
gem 'nokogiri', '1.10.4'
之后执行命令安装
$ bundle install
CarrierWave 自带了一个 Rails 生成器,用于生成图像上传程序。我们要创建一个名为 picture 的上传程
序:
$ rails generate uploader Picture
下面部分为实战样例
上传的图像应该对应于activities模型中的一个属性,先看看前人遗留数据库中有没有。
可以看到post_horizontal_image_id和post_vertical_image_id两个属性,应该是用ID寻址。
果不其然还有另一个image表,理论上我们只需要修改app/models/image.rb里的方法就可以。
但是之前他们是用图床的。如果改为本地存储这个数据模型不好使。
在activities模型中添加图像上传程序
mount_uploader :picture, PictureUploader
再把picture添加到允许修改的属性列表
def activities_params
params.require(:activities).permit(:picture)
end
到这里基本的图像上传功能已经完成了。具体实现的细节在于mount_uploader指令自动生成的一个叫picture_uploader.rb的文件。
class PictureUploader < CarrierWave::Uploader::Base
storage :file
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# 添加一个白名单,指定允许上传的图像类型
def extension_white_list
%w(jpg jpeg gif png)
end
end
因为本地服务器不堪重负,我们学校200个社团,一个社团假设有2场活动,每场活动2张海报,预计800张照片,还需要添加一个验证图像大小的模块,以节约资源。
def picture_max_size
if picture.size > 2.megabytes
errors.add(:picture, "should be less than 2MB")
end
end
当然,我们还可以在客户端进行各种限制,例如用accept参数限制图像格式。
内容总结
以上是互联网集市为您收集整理的ruby基本图片上传全部内容,希望文章能够帮你解决ruby基本图片上传所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。