Open ben7th opened 10 years ago
后台图片的管理 服务包含一个 web 页面,管理员通过这个 web 页面来上传一些用来在将来作为占位图的图片。 数据库记录曾经上传过的图片信息,记录的信息包括图片的宽 width(像素值)高 height(像素值)以及宽高比 ratio(宽/高) 所有的图片都持久化保存在 img4ye,使用 img4ye 提供的 api 来上传到 img4ye,记录 img4ye 返回的图片 CDN 网址。 简单地说:每通过后台管理界面上传一张图片,此工程数据库里记录一条数据。而图片是保存在 img4ye 的。 管理界面上需要列出数据库记录中每张图片的宽高,宽高比,和缩略图(缩略图调用 img4ye 的图片尺寸转换 url 来生成) 后端允许删除记录。删除记录后,img4ye 的图片不删。
占位图片的生成 当访问 /200/300 这样的 url 时,斜杠分隔的两个数代表期望的占位图片宽高。程序拿到这两个宽高后,根据数据库记录查找最合适的图片。 目前由于没有想到比较合适的算法,先随机选择图片 使用 url 方式,拿到 img4ye 中 @wxxx_hxxx_1e_1c 这样的网址对应的图片数据,并 sendfile
工程名 image-placeholder-service rails 工程
class Image
include Mongoid::Document
include Mongoid::Timestamps
field :url, type: String
field :width, type: Integer
field :height, type: Integer
field :ratio, type: float # 数值举例 2.12 (width 除以 heigth 获得,最多保留小数点后两位)
end
url
/
method
get
response
判断是否用户登陆了
如果没有登陆,调转到 /login
url
/login
method
get
response
判断是否用户登陆了
如果没有登陆,返回登陆表单
如果登陆了,调转到 /images
只有一个用户,用户名是 admin 密码是(开发时,询问fushang318)
验证写死在代码中,验证密码的逻辑是这样的:把提交的密码md5后与代码中写死的正确密码的MD5字符串比较,如果一样则说明密码输入正确
url
/images
method
get
response
返回目前已经有的图片列表页面
url
/images/new
method
get
response
返回上传图片文件页面
url
/images
method
post
params
file # 上传的图片文件
logic
把上传的文件通过img4ye上传,并把返回的图片url 访问地址保存到 image 模型的 url 字段
url
/:width/:height
method
get
logic
根据数据库记录查找最合适的图片。目前由于没有想到比较合适的算法,先随机选择图片
response
拿到 img4ye 中 @wxxx_hxxx_1e_1c 这样的网址对应的图片数据,并 sendfile
https://github.com/mindpin/image-service/wiki
rails 版本用 rails 4.1.2 持久模型用 mongoid 4.0.0 界面模版用 haml
已经由 @destinyd 完成
http://ph.4ye.me 访问服务
如果想通过后台管理图片,请看下面链接的说明 http://docs.4ye.me/notes/54695607286e6f425f030000
传入宽高值,从图片库里选择最合适的占位图片。
图片库里的图片由管理员维护,持久化记录宽高,以及宽高比值。width, height, ratio 简单起见,可以在部署后把一些图片放置在指定的目录下,不通过 web 管理。
获取图片时,根据传入的宽高计算出比值,选择宽高和比值都最接近的图片,进行缩放处理后返回response
体验类似:http://placekitten.com/