• 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参数限制图像格式。

  • 相关阅读:
    关于NB-IoT,没有比这篇更通俗易懂的啦!
    使用SQL Server 2014 In-Memory 内存数据库时需要注意的地方
    SQL Server Profiler:使用方法和指标说明
    SQL Server 维护计划实现数据库备份(策略实战)
    SQL Server 连接问题圣经-命名管道
    如何查看 exec sp_execute 10 XXX, XXXX的RPC事件 内容
    Mac下Qt连接MySQL 驱动问题
    {Nodejs} 错误 HPE_INVALID_CONSTANT 解决
    {Nodejs} request URL 中文乱码
    Centos 5.5 安装 Git 以及配置
  • 原文地址:https://www.cnblogs.com/buaayzx/p/12958240.html
Copyright © 2020-2023  润新知