使用nginx image filter实现类OSS对象存储中对图片的实时处理
使用Nginx image_filter实现类似OSS图片处理
在家使用自己的电脑做了一个小应用,可查看照片,按以前的方式,需要在用户上传图片后对进行裁剪压缩,然后给前端一个缩略图地址与原图地址。这种方式有两个弊端磁盘空间的浪费、缩略图尺寸调整不便捷。是否有其他不使用云OSS存储的情况下自己实现一套类似OSS的图片处理?
后来搜索资料,发现使用nginx的image_filter可以实现。根据网上其他人的实例使用没有成功。
安装nginx与imageFilter不在复述,自己从网上看文章就可以了。我使用的版本是nginx 1.13.12 直接自带该插件。
自己调整后可以使用,下面贴出完整配置。
server { listen 80; server_name 127.0.0.1; charset utf-8; root /www/uploadfile; #拦截所有带“!”号的图片请求 location ~* ^(.*\.(?:jpg|gif|png|jpeg|bmp))!(.*){ #rewrite ^(.*\.(?:jpg|gif|png))! $1; #图片访问路径 set $filename $1; #图片压缩尺寸 set $img_arg $2; #拆解处理尺寸参数,参数性质如200x400样式 if ($img_arg ~ "^(\d+)x(\d+)") { set $img_width $1; set $img_height $2; } if ($img_arg ~ "^(\d+)$") { set $img_width $1; set $img_height "-"; } if ($img_arg ~ "^x(\d+)") { set $img_width "-"; set $img_height $1; } if ( $img_width = "" ){ set $img_width 100; } if ( $img_height = ""){ set $img_height 100; } #使用内部跳转,将尺寸参数传递 echo_exec /_imgFilt; } #图片处理 location /_imgFilt { alias /www/uploadfile$filename; image_filter resize $img_width $img_height; image_filter_buffer 10M; } location ~ .*\.(swf|docx|doc|xls|xlsx|txt|pdf|ppt|pptx|mp3|zip|rar|tar|gz|mp4|ttf|ttc|fmap|fmi|theme)$ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; expires 30d; } }
图片访问请求地址: http://127.0.0.1/upload/20181120/1542720637600.jpg!500x400
使用以上请求,就可以实现使用nginx image filter实施图片处理。 因是自己的小应用在使用,所以性能与访问速度方面还可以。
非常耗费CPU资源,如果是公司业务,该方式请谨慎使用!!!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript中Promise函数then的奥秘探究
Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口。 那么,什么是Promises? 首先,它是一个对象,也就是说与其他JavaScript对象的用法,没有什么两样;其次,它起到代理作用(proxy),充当异步操作与回调函数之间的中介。它使得异步操作具备同步操作的接口,使得程序具备正常的同步运行的流程,回调函数不必再一层层嵌套。 简单说,它的思想是,每一个异步任务立刻返回一个Promise对象,由于是立刻返回,所以可以采用同步操作的流程。这个Promises对象有一个then方法,允许指定回调函数,在异步任务完成后调用。 Promise的then方法可以接受前一个函数的执行结果,还可以保证另一个Promise的顺序执行,这到底是怎么做到的呢? 原理图(先上图) 问题需求 如何保证多个 promise 顺序执行? 实例: var f1 = function (){ return new Promise(function (resolve, reject){ setTimeout(function (){ console.log("f...
- 下一篇
设计要做到扩展性强还挺难的
概述 在日常开发中,有时候你的上司会跟你说,这个模块的设计扩展性要高。把这句话说出来很简单,但是要做到则非常难。导致难的其中一个因素是: 你不熟悉这个行业的业务的玩法 我举个例子来说明。像电商行业里的满多少减多少这样的营销活动,如果你一开始只是认为这种活动就是单指满多少钱减多少钱的话(例如:满100元减20元),那么就很有可能导致无论你如何设计,它都不具备可扩展性。为什么呢? 由于你只是认为只有类似满100元减20元这样的玩法,就很有可能如下设计表: CREATE TABLE `manjian_activity` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `activity_name` varchar(100) NOT NULL DEFAULT '' COMMENT '活动名称', `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '活动状态', `target_price` int(11) DEFAULT NULL COMMENT '满减,目标金额'...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主