zoukankan      html  css  js  c++  java
  • ruby基本图片上传

    图片上传问题

    在我们的项目里,需要实现海报的图片上传,便于更好地向外界展示一个社团活动的基本内容,但是在处理中间件相关问题时遇到了一点小小的挫折。不过这并不要紧,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模型中的一个属性,先看看前人遗留数据库中有没有。

    image-20200525171437251

    可以看到post_horizontal_image_id和post_vertical_image_id两个属性,应该是用ID寻址。

    image-20200525171651417

    果不其然还有另一个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参数限制图像格式。

  • 相关阅读:
    docker OCI runtime
    docker 非root用户修改mount到容器的文件出现“Operation not permitted
    清除canvas画布内容--点擦除+线擦除
    js实现存储对象的数据结构hashTable和list
    学习ES6的全部特性
    页面重绘与重排版的性能影响
    测试css3的动画效果在display:none的时候不耗费性能
    stroke和fill顺序对绘图的影响
    css样式学习小知识
    统一事件监听
  • 原文地址:https://www.cnblogs.com/buaayzx/p/12958240.html
Copyright © 2011-2022 走看看