工具类,下载文件,参数给个URL,返回一个Byte数组,byte数组当参数写入指定的路径中

工具类:

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();

猜你喜欢

转载自my.oschina.net/Skynet01/blog/1809933
今日推荐