Java 如何获取url地址文件流

 更新时间:2022年07月12日 11:20:02   作者:shiyue41  
这篇文章主要介绍了Java 如何获取url地址文件流,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

获取url地址文件流

/**
 * 根据url下载文件流
 * @param urlStr
 * @return
 */
public static InputStream getInputStreamFromUrl(String urlStr) {
    InputStream inputStream=null;
    try {
        //url解码
        URL url = new URL(java.net.URLDecoder.decode(urlStr, "UTF-8"));
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3 * 1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        inputStream = conn.getInputStream();
    } catch (IOException e) {
        
    }
    return inputStream;
}

根据url获取文件的二进制

当需要获取url的文件,又不想下载文件的时候,可以用这个工具类。

方便快捷,使用HttpURLConnection,先根据URL获取文件流,然后把获取的二进制流存储进去数据库即可,到时候拿出来直接下载、打开也是OK的。

上代码

package jd_test;
import java.io.BufferedReader; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL;
import java.util.Base64;
import java.util.Random;
import java.util.stream.Stream;
 
public class UrlResource { 
	 private static Base64.Decoder decoder = Base64.getDecoder();
	 private static Base64.Encoder encoder = Base64.getEncoder();
	public static void main(String[] args){ 
		try { 
			//System.out.println(UrlResource.getUrlDetail("http://www.baidu.com",true)); 
			//saveUrlFile("你的文档的路径.gif", "D:\\1.gif");
			
			System.out.println(encoder.encode(getUrlFileData("http://www.你的文档的路径")));
		  // System.out.println(getUrlFileData("http://www.你的文档的路径"));
		   // saveUrlFile("http://www.你的文档的路径", "D:\\1.pdf");
		  //  System.out.println(UrlResource.getUrlDetail("http://www.你的文档的路径",true)); 
		
			//确定写出文件的位置
			File file = new File("D:\\1.pdf");
			//建立输出字节流
			FileOutputStream fos = new FileOutputStream(file);
			
			//fos.write(decoder.decode(encoder.encode(getUrlFileData("http://www.你的文档的路径"))));
			//fos.write(encoder.encode(getUrlFileData("http://www.你的文档的路径")));
			fos.write(getUrlFileData("http://www.你的文档的路径"));
			
			//用FileOutputStream 的write方法写入字节数组
			//fos.write(getUrlFileData("http://www.你的文档的路径"));
			System.out.println("写入成功");
			//为了节省IO流的开销,需要关闭
			fos.close();
		} catch (Exception e) {
			e.printStackTrace(); 
		} 
	} 
	
	//获取网络文件,转存到fileDes中,fileDes需要带文件后缀名 
	public static void saveUrlFile(String fileUrl,String fileDes) throws Exception 
	{ 
		File toFile = new File(fileDes); 
		if (toFile.exists()) 
		{ 
		// throw new Exception("file exist"); 
		return; 
		} 
		toFile.createNewFile(); 
		FileOutputStream outImgStream = new FileOutputStream(toFile);
		System.out.println(getUrlFileData(fileUrl));
		outImgStream.write(getUrlFileData(fileUrl)); 
		
		outImgStream.close(); 
	} 
	
	public static byte[] getBase64UrlFileData(String fileUrl)
	{
		try {
			
			//发票PDF文件二进制流base64,如果是get请求还需要进行UrlEncode,使用sdk除外。 
			return encoder.encode(getUrlFileData(new String(decoder.decode(fileUrl))));
		} catch (Exception e) {
			e.printStackTrace();
		}
			return null;
		}
	//获取链接地址文件的byte数据 
	public static byte[] getUrlFileData(String fileUrl) throws Exception 
	{ 
		URL url = new URL(fileUrl); 
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
		httpConn.connect(); 
		InputStream cin = httpConn.getInputStream(); 
		ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
		byte[] buffer = new byte[1024]; 
		int len = 0; 
		while ((len = cin.read(buffer)) != -1) { 
		outStream.write(buffer, 0, len); 
		} 
		cin.close(); 
		byte[] fileData = outStream.toByteArray(); 
		outStream.close(); 
		return fileData; 
	} 
	
	//获取链接地址的字符数据,wichSep是否换行标记 
	public static String getUrlDetail(String urlStr,boolean withSep) throws Exception 
	{ 
	URL url = new URL(urlStr); 
	HttpURLConnection httpConn = (HttpURLConnection)url.openConnection(); 
	httpConn.connect(); 
	InputStream cin = httpConn.getInputStream(); 
	BufferedReader reader = new BufferedReader(new InputStreamReader(cin,"UTF-8")); 
	StringBuffer sb = new StringBuffer(); 
	String rl = null; 
	while((rl = reader.readLine()) != null) 
	{ 
		if (withSep) 
		{ 
			sb.append(rl).append(System.getProperty("line.separator")); 
		}
		//如果是要直接显示到页面中,可以讲获得的byte数据进行base64加密,加上文件头,直接设置到img的src里面就可以了
		else 
		{ 
			sb.append(rl); 
		} 
	} 
		return sb.toString(); 
	} 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot与Spring Security的跨域问题解决方案

    Spring Boot与Spring Security的跨域问题解决方案

    跨域问题是指在Web开发中,浏览器出于安全考虑,限制了不同域名之间的资源访问,本文重点给大家介绍Spring Boot与Spring Security的跨域问题解决方案,感兴趣的朋友一起看看吧
    2023-09-09
  • SpringBoot集成阿里云OSS图片上传

    SpringBoot集成阿里云OSS图片上传

    这篇文章主要为大家详细介绍了SpringBoot集成阿里云OSS图片上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 解决mybatis generator MySQL自增ID出现重复问题MySQLIntegrityConstraintViolationException

    解决mybatis generator MySQL自增ID出现重复问题MySQLIntegrityC

    在MySQL中使用MyBatis时,可能会遇到由于主键重复导致的插入失败问题,此问题通常发生在连续插入多条数据时,如果selectKey的order配置错误,如使用BEFORE而不是AFTER,将会导致获取的ID未更新,引起主键重复错误,正确的配置应使用AFTER
    2024-10-10
  • springboot手写一个自己的starter源码

    springboot手写一个自己的starter源码

    在本篇文章里小编给大家整理了关于springboot手写一个自己的starter源码的全部知识点内容,需要的朋友们学习下。
    2019-06-06
  • Spring框架中的重要注解及其应用代码实例

    Spring框架中的重要注解及其应用代码实例

    Spring框架广泛应用于多种场景中,下面这篇文章主要给大家介绍了关于Spring框架中重要注解及其应用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • Java中的Vector和Stack底层源码分析

    Java中的Vector和Stack底层源码分析

    这篇文章主要介绍了Java中的Vector和Stack底层源码分析,Stack继承了Vector,Vector底层还是一个List,也就是基于数组来实现的,所以ArrayList有的优点,比如获取元素的速度快,随机读,它都有,需要的朋友可以参考下
    2023-12-12
  • Java使用JDBC连接数据库的详细步骤

    Java使用JDBC连接数据库的详细步骤

    本文详细讲解了Java使用JDBC连接数据库的详细步骤,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • SpringBoot实现国际化过程详解

    SpringBoot实现国际化过程详解

    这篇文章主要介绍了SpringBoot实现国际化过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 在RedHat系统上安装JDK与Tomcat的步骤

    在RedHat系统上安装JDK与Tomcat的步骤

    这篇文章主要介绍了在RedHat系统上安装Java与Tomcat的步骤,同样适用于CentOS等RedHat系的Linux系统,需要的朋友可以参考下
    2015-11-11
  • Java利用遗传算法求解最短路径问题

    Java利用遗传算法求解最短路径问题

    遗传算法(Genetic Algorithm,GA)最早是由美国的John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。本文将利用遗传算法求解最短路径问题,需要的可以参考一下
    2022-06-06

最新评论