最近公司跟大华和海康摄像头调试远程抓图的api,什么叫远程抓图,就是我告诉它相机id,它拍个当前相机的图像给我。 我这边拿到第三方的图片url后去下载图片存储到自己这边。可谓是一波三折。
为什么 java.io.FileNotFoundException 因为请求图片时图片资源不存在,才会有这个错。 当时调试的时候我这边查看日志拿到路径在浏览器里面可以直接打开,排查的主要方向放在了请求方式上,反应过来的时候已经好久,固写这篇文章希望可以帮到大家。需要延迟获取图片流的代码也贴在下面。
远程抓图api(大华官方文档有过解释) 由于平台下发抓图指令到设备,设备将图片异步写入此接口返回的地址中,所以此接口获取到的地址,不一定立马能访问到资源;
所以,在调试文档时一定要把接口描述和注意事项看完。
public static InputStream getThisUrlInputStream(String fileUrl, int delatPostCount) { InputStream is = null; if (delatPostCount == 3) { return is; try { //下载网络文件 URL url = new URL(fileUrl); // 打开连接 URLConnection con = url.openConnection(); //设置请求超时为5s con.setConnectTimeout(5 * 1000); //防止屏蔽程序抓取而返回403错误 不加请求oss的部分路径会403 con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); try { // 输入流 is = con.getInputStream(); } catch (FileNotFoundException exception) { Thread.sleep(2000L); is = getThisUrlInputStream(fileUrl, ++delatPostCount); return is; if (is.available() == 0) { Thread.sleep(2000L); is = getThisUrlInputStream(fileUrl, ++delatPostCount); return is; } catch (Exception e) { e.printStackTrace(); return is; 问题二(请求返回403) 请求时需要加上该参数。 con.setRequestProperty(“User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”); //下载网络文件 URL url = new URL(fileUrl); // 打开连接 URLConnection con = url.openConnection(); //设置请求超时为5s con.setConnectTimeout(5 * 1000); //防止屏蔽程序抓取而返回403错误 不加请求oss的部分路径会403 con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 输入流 is = con.getInputStream(); 希望本文可以帮到你。 在做 jsp 上传图片时,把 java 代码直接改成 jsp,上传时产生 如下异常: 2012-12-31 8:59:21 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.io.IOException: Stream closed … 百思不得其解,翻出 jsp 转成 servlet 后的代码。如下(很很的醒目一下): 代码如下: … }catch(Exception e){ e.printStackTrace(); springcloud整合oss报403问题 一. 跨域问题——需要在服务器配置允许跨域二. 权限问题——需要给ak和as设置管理OSS权限三. 过期时间expireTime问题——四. 注意:一定先用OSS文档提供demo测试自己OSS是否正常上传。像第三种报错信息,我把所有报错信息排查了,都没有解决了,因为整合springcloud报错信息不一定是文档中那样。所以当遇到问题,先使用OSS文档测试一下,可以准确定位自己的报错信息。 一. 跨域问题——需要在服务器配置允许跨域 按照我上面配置,然 java.io.FileNotFoundException异常出现的情况就是你的代码里面想要读取的文件找不到,注意,这里的找不到是在你的编译结果文件夹里面找不到,而不是在你的工程里面找不到,很多同学说自己工程里面有这个文件,为什么还要报这个异常?这个时候,你最好跑到你的编译文件放的文件夹下面,比如tomcat的webapps文件夹下面,找找你的工程对应的文件夹,看看那个里面有没有你的文件 Browser.js 官方文档:https://help.aliyun.com/document_detail/64040.html GITHUB地址:https://gitee.com/mirrors/ali-oss GITEE镜像地址:https://github.com/ali-sdk/ali-oss 示例:列出所有对象(测试bucket,对象数量较少) </head> <body>&l 做一个简单的文件上传下载的功能,上传没问题,但是下载的时候报错,java.io.FileNotFoundException:(文件名、目录名或卷标语法不正确。) 开始以为是从前端传过来的路径有问题,百度之后,试过其他的解决方案,都不成功。无奈,后尝试先把后台代码中的文件下载路径写死。 再次测试下载,成了! 说明就是路径或文件名的问题。之后分别把路径和文件名写死做测试。 路径为变量,文件名写死,下载成功: 文件名为变量,路径写死,下载失败: 可得:此问题是由文件名引起 判断文件变量的值 光看字面,是 Java IO流阿里云OSS上传照片 声明:这个为我个人原创 我没有copy别人的代码 但我看他们写的代码块都是一致的 连错误都是 很容易误导别人 我写代码的时候一直想不通 后面解决之后 就想自己写一个给遇到有相同问题的小伙伴扩散一下思维 -好了 说下我的代码 是从前端request请求过来到我后端controller层这边 你可以先打个断点 debug一下 看你的request请求过来的文件是什么类型 我就是这里被其他博客的误导了 当时一直强转报错 就很纳闷 然后我自己Debug去找原因 原来是接收的类. 在使用阿里云OSS读取文件时,报错:java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException 原因是 没有引入jdom。工程缺少OSS Java SDK编译或运行必须的包。 解决方案:在maven里加上 <!-- https://mvnrepository.com/artifact/org.jdom/jdo... 流的概念 流:流动,流向,是一个抽象,动态的概念,是一连串连续动态的额数据集合。常见的如L数据库,文件,内存,网络连接。IO设备。但是得记住,一切以程序为中心。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190519000224628.png?x-oss-process=image/ IO最重要的5个类和三个接口。 功能分类: 节点流:可以直接从... 一、问题 在使用FileInputStream或FileOutputStream时会遇到如下问题1和问题2。 问题1: java.io.FileNotFoundException: .\xxx\xxx.txt (系统找不到指定的路径。) at java.io.FileOu... import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; impo...
public static InputStream getThisUrlInputStream(String fileUrl, int delatPostCount) { InputStream is = null; if (delatPostCount == 3) { return is; try { //下载网络文件 URL url = new URL(fileUrl); // 打开连接 URLConnection con = url.openConnection(); //设置请求超时为5s con.setConnectTimeout(5 * 1000); //防止屏蔽程序抓取而返回403错误 不加请求oss的部分路径会403 con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); try { // 输入流 is = con.getInputStream(); } catch (FileNotFoundException exception) { Thread.sleep(2000L); is = getThisUrlInputStream(fileUrl, ++delatPostCount); return is; if (is.available() == 0) { Thread.sleep(2000L); is = getThisUrlInputStream(fileUrl, ++delatPostCount); return is; } catch (Exception e) { e.printStackTrace(); return is;
问题二(请求返回403) 请求时需要加上该参数。 con.setRequestProperty(“User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”); //下载网络文件 URL url = new URL(fileUrl); // 打开连接 URLConnection con = url.openConnection(); //设置请求超时为5s con.setConnectTimeout(5 * 1000); //防止屏蔽程序抓取而返回403错误 不加请求oss的部分路径会403 con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 输入流 is = con.getInputStream(); 希望本文可以帮到你。 在做 jsp 上传图片时,把 java 代码直接改成 jsp,上传时产生 如下异常: 2012-12-31 8:59:21 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.io.IOException: Stream closed … 百思不得其解,翻出 jsp 转成 servlet 后的代码。如下(很很的醒目一下): 代码如下: … }catch(Exception e){ e.printStackTrace(); springcloud整合oss报403问题 一. 跨域问题——需要在服务器配置允许跨域二. 权限问题——需要给ak和as设置管理OSS权限三. 过期时间expireTime问题——四. 注意:一定先用OSS文档提供demo测试自己OSS是否正常上传。像第三种报错信息,我把所有报错信息排查了,都没有解决了,因为整合springcloud报错信息不一定是文档中那样。所以当遇到问题,先使用OSS文档测试一下,可以准确定位自己的报错信息。 一. 跨域问题——需要在服务器配置允许跨域 按照我上面配置,然 java.io.FileNotFoundException异常出现的情况就是你的代码里面想要读取的文件找不到,注意,这里的找不到是在你的编译结果文件夹里面找不到,而不是在你的工程里面找不到,很多同学说自己工程里面有这个文件,为什么还要报这个异常?这个时候,你最好跑到你的编译文件放的文件夹下面,比如tomcat的webapps文件夹下面,找找你的工程对应的文件夹,看看那个里面有没有你的文件 Browser.js 官方文档:https://help.aliyun.com/document_detail/64040.html GITHUB地址:https://gitee.com/mirrors/ali-oss GITEE镜像地址:https://github.com/ali-sdk/ali-oss 示例:列出所有对象(测试bucket,对象数量较少) </head> <body>&l 做一个简单的文件上传下载的功能,上传没问题,但是下载的时候报错,java.io.FileNotFoundException:(文件名、目录名或卷标语法不正确。) 开始以为是从前端传过来的路径有问题,百度之后,试过其他的解决方案,都不成功。无奈,后尝试先把后台代码中的文件下载路径写死。 再次测试下载,成了! 说明就是路径或文件名的问题。之后分别把路径和文件名写死做测试。 路径为变量,文件名写死,下载成功: 文件名为变量,路径写死,下载失败: 可得:此问题是由文件名引起 判断文件变量的值 光看字面,是 Java IO流阿里云OSS上传照片 声明:这个为我个人原创 我没有copy别人的代码 但我看他们写的代码块都是一致的 连错误都是 很容易误导别人 我写代码的时候一直想不通 后面解决之后 就想自己写一个给遇到有相同问题的小伙伴扩散一下思维 -好了 说下我的代码 是从前端request请求过来到我后端controller层这边 你可以先打个断点 debug一下 看你的request请求过来的文件是什么类型 我就是这里被其他博客的误导了 当时一直强转报错 就很纳闷 然后我自己Debug去找原因 原来是接收的类. 在使用阿里云OSS读取文件时,报错:java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException 原因是 没有引入jdom。工程缺少OSS Java SDK编译或运行必须的包。 解决方案:在maven里加上 <!-- https://mvnrepository.com/artifact/org.jdom/jdo... 流的概念 流:流动,流向,是一个抽象,动态的概念,是一连串连续动态的额数据集合。常见的如L数据库,文件,内存,网络连接。IO设备。但是得记住,一切以程序为中心。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190519000224628.png?x-oss-process=image/ IO最重要的5个类和三个接口。 功能分类: 节点流:可以直接从... 一、问题 在使用FileInputStream或FileOutputStream时会遇到如下问题1和问题2。 问题1: java.io.FileNotFoundException: .\xxx\xxx.txt (系统找不到指定的路径。) at java.io.FileOu... import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; impo...
请求时需要加上该参数。 con.setRequestProperty(“User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”);
希望本文可以帮到你。