阿里oss截缩略图:Memory limit for image processing exceeded 错误解决方案
程序员文章站
2022-07-14 21:48:46
...
说明:
目前正在参与一个企业级软件的开发,软件中涉及到的图片、视频、附件等全部都存储于阿里的oss,前些日子突然遇到一个棘手的问题:
上传图片到阿里oss后需要获取到它的缩略图供前端展示,偶尔会发生缩略图的链接无法访问的情况,直接在浏览器上打开链接,会报内存超出限制的错误。如下:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>MemLimitExceeded</Code>
<Message>Memory limit for image processing exceeded.</Message>
<RequestId>5D6E8A896787ADB9794472C7</RequestId>
<HostId>xxxxx.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
虽然问题不大,但这着实让人恶心,出现了这种问题测试一直不让我通过。反复测试后,发现只有上传自己制作的gif图病获取缩略图才会出现这种情况,而上传在百度上下载的gif图又不会出现这种情况。之后提了一个工单给阿里oss,反应了gif图不超过阿里规定的20MB时为何会发生无法获取缩略图的情况,可最终问题也没有得到解决,只是回复我虽然gif图不超过20MB,但是该gif图的帧数太高,达到465帧。
问题得不到解决,只有再次去查找oss的官方文档了,后来真的找到了替代的解决方案。我在获取缩略图的时候,并没有制定缩略图的格式,这就导致原图为gif格式,其缩略图也会为gif格式,gif图帧数不高没有什么问题,但帧数一高就会出现上面的情况。
我获取缩略图的策略:其中
//weight和height为自己定义个参数
String process = "image/resize,m_mfit,w_" + width + ",h_" + height ;
//得到的链接是:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_mfit,h_100,w_100
//最终处理方案:其中format,jpg为获取的缩略图为jpg格式 quality,Q_85,缩略图质量为85%
String process = "image/resize,m_mfit,w_" + width + ",h_" + height + "/format,jpg" + "/quality,Q_85";
最后,即使是高帧数的gif图也可以获取到缩略图了。
对应OSS文档地址:
上一篇: OSS工具类
下一篇: Flink Hudi 测试