java从网络中下载文件,封装了一个工具类
package com.fsk.common.utils.file;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class FileUtils {
/**
* @description: 获取网络中文件流
* @param urlPath 文件路径
* @author: cc
* @date: 2021/1/12 17:12
*/
public static byte[] getNetWorkFileBytes(String urlPath) throws IOException{
URL url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为30秒
conn.setConnectTimeout(30*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//获取响应的字节长度
int length = urlcon.getContentLength();
//获取输入流
InputStream inputStream = conn.getInputStream();
//获取文件字节数组
byte[] bytes = readInputStream(inputStream);
return bytes;
}
/**
* @description: 网络中获取文件流并保存到指定路径
* @param urlPath 文件路径
* @param savePath 保存路径名称
* @author: cc
* @date: 2021/1/12 17:12
*/
public static void downloadToLocalPath(String urlPath, String savePath) throws IOException{
byte[] bytes = getNetWorkFileBytes(urlPath);
saveToLocal(savePath, bytes);
}
/**
* @description: 网络中获取文件流并在浏览器中下载
* @param urlPath 文件路径
* @param fileName 文件名称
* @param response 响应
* @author: cc
* @date: 2021/1/12 17:12
*/
public static void downloadToResponse(String urlPath, String fileName, HttpServletResponse response) throws IOException{
response.setContentType("application/octet-stream; charset=UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".dat");
ServletOutputStream out = response.getOutputStream();
byte[] bytes = FileUtils.getNetWorkFileBytes(urlPath);
out.write(bytes);
out.close();
}
/**
* @description: 读取字节
* @param inputStream
* @return: byte[]
* @author: cc
* @date: 2021/1/12 17:19
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
/**
* @description: 保存到本地指定路径
* @param filePath 保存的路径
* @param content
* @return: boolean
* @author: cc
* @date: 2021/1/12 17:19
*/
public static boolean saveToLocal(String filePath, byte[] bytes) throws IOException {
File saveDir = new File(filePath);
if (!saveDir.getParentFile().exists()) {
saveDir.mkdir();
}
FileOutputStream fos = new FileOutputStream(filePath);
fos.write(bytes);
if (fos != null) {
fos.close();
}
return true;
}
}