工具类:
public class FileStreamTools {
/*
Paras:fileUrl文件下载地址
return:文件二进制数据流
*/
public static byte[] getFileStream(String fileUrl) {
try {
URL url = new URL(fileUrl);
// 打开和URL之间的连接
URLConnection conn = url.openConnection();
// 设置通用的请求属性
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(80000);
conn.setReadTimeout(80000);
//Post 请求不能使用缓存
conn.setUseCaches(false);
//调用URLConnection对象提供的connect方法连接远程服务
conn.connect();
//通过URL打开了通道,拿到了输入流对象
InputStream inStream = conn.getInputStream();
//创建缓冲流对象加强功能
//BufferedInputStream bis =new BufferedInputStream(inStream);
//byte[] buffer = new byte[1204];
int count = conn.getContentLength();
byte[] bytes = new byte[count];
int readCount = 0;
while (readCount < count) {
readCount += inStream.read(bytes, readCount, count - readCount);
}
//关闭流
inStream.close();
return bytes;
} catch (Exception e) {
e.printStackTrace();
return null ;
}
}
}
返回的byte数组,然后写入指定的路径中
/*文件名字,要用来当索引的*/
String fileName = attach.getPk_info() + "-" + attach.getFileName();
/*路径是文件夹路径,至于在哪个盘符下,看你是什么系统,windows是tomcat所在盘符,linux又不一样了*/
String filePath = Paths.get(configProperties.getDownloadDir(), fileName).toString();
/*指定要写到的文件目录及名称*/
File dest = new File(filePath);
/*判断指定的路径中有没有,如果有就直接提取,如果没有就往里下*/
if (dest.exists()) {
FileInputStream fis = new FileInputStream(dest);
attach.setFileSize(fis.available());
fis.close();
return;
}
//创建文件读入流对象,因为方法返回的是数组字节,直接写入就行了
OutputStream fos =new FileOutputStream(dest);
fos.write(Bytes[]数组对象);
fos.close();