今天根据URL,下载视频。

new URL(url1).openConnection() 的时候,用HttpURLConnection接,出现302,以至于后面取不到流,无法读流。

HttpURLConnection con = (HttpURLConnection) new URL(url1).openConnection();
con.setConnectTimeout(15000);
con.setReadTimeout(15000);
//有博文说是多次转发的问题,允许它自动重定向,我这边加上之后没啥用
con.setInstanceFollowRedirects(true);

后面是这样写的,才解决了问题。

/** 根据URL下载视频
* @author yys
* @date 2022/10/17 10:58
* @param url1 下载地址,bdPath 文件保存路径
* @return string
*/
public String downVideo(String url1,String bdPath) throws Exception {
Map<String, Object> queryJson = new HashMap<String, Object>();
//example.getVideoUrl()这里就是获取视频的url。
URL url = new URL(url1);
//获取文件名称,并且此时的文件名是/开始的,所以先分割获取。
String file = url.getFile();
String[] split = file.split("/");
HttpURLConnection con = null;
//读文件流
DataInputStream in = null;
DataOutputStream out = null;
try {
// 获取文件流
con = (HttpURLConnection) new URL(url1).openConnection();
con.setConnectTimeout(15000);
con.setReadTimeout(15000);
con.setInstanceFollowRedirects(false);
if (con.getResponseCode() == 302) {
//如果会重定向,保存302重定向地址,以及Cookies,然后重新发送请求(模拟请求)
String location = con.getHeaderField("Location");
con.disconnect();
url1 = location;
con = (HttpURLConnection) new URL(url1).openConnection();
con.setConnectTimeout(15000);
con.setReadTimeout(15000);
}
int code = con.getResponseCode();
if (code != HttpURLConnection.HTTP_OK) {
queryJson.put("message","error");
throw new Exception("文件读取失败");
}
//读文件流
in = new DataInputStream(con.getInputStream());
out = new DataOutputStream(new FileOutputStream(bdPath));
byte[] buffer = new byte[2048];
int count = 0;
while ((count = in.read(buffer)) > 0) {
out.write(buffer, 0, count);
}
}catch (IOException e) {
throw new Exception("IOException...");
}finally {
out.close();
in.close();
}
queryJson.put("message","success");
return JSON.toJSONString(queryJson);
}

  



最新文章

  1. Java通过JNI调用C
  2. Centos 安装了 Wkhtmltopdf 却依旧显示 无法打印pdf
  3. Android java.lang.ClassCastException
  4. 关于mac地址的一点感想
  5. matlab里plot画多幅图像、设置总标题、legend无边框
  6. 【JavaScript】设计模式-module模式及其改进
  7. jvm学习笔记二(减少GC开销的建议)
  8. 详解ES5和ES6的继承
  9. ReactNative用指定的设备/模拟器运行项目
  10. 阿里Java开发手册
  11. HDU ACM 1879 继续畅通工程
  12. Jmeter 录制脚本(一)
  13. import tkinter与from tkinter import *的区别
  14. js创建表单并提交
  15. idea 打包java程序
  16. aarch64_g3
  17. 牛客网——C列一列
  18. LRU算法 - LRU Cache
  19. C# GDI+ 实现橡皮筋技术
  20. jdk8中的StreamAPI

热门文章

  1. 在 SpringBoot 项目中简单实现 JWT 验证
  2. 浅谈Python中的包
  3. 注解 @RequestMapping @RequestParam @RequestBody
  4. 安卓逆向.5 xposed 替换方法-(实战贪吃蛇)
  5. charles初级使用
  6. 【JavaScript】JS引擎中执行上下文如何顺序执行代码
  7. Prometheus&amp;Alertmanager告警推送
  8. NOIP2021游记总结
  9. JZOJ 100019.A
  10. JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)