博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神奇的504 Bad Gateway Timeout
阅读量:6813 次
发布时间:2019-06-26

本文共 2809 字,大约阅读时间需要 9 分钟。

hot3.png

今天遇到一个神奇的BUG,一个终端去下载一张图片,出现了504 Bad Gateway Timeout错误,把同样的url放到PC浏览器上又能正常打开,最后问题是解决了,但是具体原因还没搞清楚。

望有高人看到指点一下

出现问题的代码如下:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();        connection.setRequestMethod("GET");        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {            InputStream is = connection.getInputStream();            BufferedInputStream bis = new BufferedInputStream(is);                        bis.mark(1024);            byte[] buffer = new byte[1024];            bis.read(buffer);            String orientation = parseOrientation(buffer);            // decode bitmap size            bis.reset();            bis.mark(bis.available());            Options options = new Options();            options.inJustDecodeBounds = true;            BitmapFactory.decodeStream(bis, null, options);            // decode scaled bitmap            bis.reset();            options.inSampleSize = calculateScaleSize(options.outWidth, options.outHeight);            options.inJustDecodeBounds = false;            Bitmap scaleBitmap = BitmapFactory.decodeStream(bis, null, options);            bis.close();            is.close();        }

经过多次尝试后,下面代码可以正常下载到图片:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();        connection.setRequestMethod("GET");        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {            InputStream is = connection.getInputStream();            ByteArrayOutputStream baos = new ByteArrayOutputStream();            byte[] buffer = new byte[10240];            int length;            while ((length = is.read(buffer)) > -1) {                baos.write(buffer, 0, length);            }            baos.flush();            Log.d(TAG, "download finish: " + baos.size());            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());            baos.close();            is.close();            bais.mark(1024);            buffer = new byte[1024];            bais.read(buffer);            String orientation = parseOrientation(buffer);            // decode bitmap size            bais.reset();            bais.mark(bais.available());            Options options = new Options();            options.inJustDecodeBounds = true;            BitmapFactory.decodeStream(bais, null, options);            // decode scaled bitmap            bais.reset();            options.inSampleSize = calculateScaleSize(options.outWidth, options.outHeight);            options.inJustDecodeBounds = false;            Bitmap scaleBitmap = BitmapFactory.decodeStream(bais, null, options);            bais.close();            is.close();        }

两种写法唯一的区别就是方法一是拿到InputStream后直接Decode,方法二是先把数据下载到内存然后Decode,为啥方法一就会出现“504 Bad Gateway Timeout”呢?

转载于:https://my.oschina.net/laomengzhu/blog/669121

你可能感兴趣的文章
mysql高级管理-note
查看>>
linux登录显示 Error in service module错误
查看>>
娱乐篇第十期:互联网的事情you意思(十)
查看>>
MyBatis基础:MyBatis入门(1)
查看>>
vmware workstation虚拟环境安装及创建虚拟机
查看>>
360搜索引擎能否给苦逼的站长们带来希望?
查看>>
SSH KEY免密码验证
查看>>
客户端判断是否为IE9以上版本
查看>>
newusers和chpasswd的用法
查看>>
关键字AUTO_INCREMENT 重命名表 修改列的属性。
查看>>
fastreport(B)
查看>>
伪造邮件***,社工钓鱼,你中招了吗【一】
查看>>
Context 使用不当造成内存泄露
查看>>
C#双缓冲机制
查看>>
12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 N
查看>>
P2P概览与原理解析
查看>>
zabbix监控端口状态
查看>>
php检测函数是否存在函数 function_exists
查看>>
登陆界面上下左右居中自适应屏幕显示的简单实现
查看>>
【解决】Windows Mobile 6 Professional SDK Refresh.msi 在xp上一直卡死
查看>>