ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

工具类(网络文件下载到本地)

2022-03-07 16:01:51  阅读:259  来源: 互联网

标签:文件 String filePath 网络 fileName 下载 本地 new conn


工具类(网络文件下载到本地)

package com.cpiaoju.constructionbank.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ccb.sdk.CCBSDK;
import com.cpiaoju.constructionbank.constant.SysInstance;
import com.cpiaoju.constructionbank.entity.FileInfo;
import com.cpiaoju.constructionbank.exception.SysException;
import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.List;

@Slf4j
public abstract class SysUtil {

    /**
     * 上传文件并返回
     *
     * @param path 文件本地服务器路径
     * @return 文件ID、文件密码
     */
    public static FileInfo getFileIdAndPwd(String path) {
        try {
            String res = CCBSDK.upload(path);
            log.info("===>调用建行文件上传接口,返回值:【{}】", res);
            JSONObject jsonObject = JSONUtil.parseObj(res);
            JSONObject data = jsonObject.getJSONObject("Data");
            String fileId = data.getStr("File_Id");
            String authCode = data.getStr("Auth_Code");
            String fileName = data.getStr("File_Name");
            if (StrUtil.isNotBlank(fileId) && StrUtil.isNotBlank(authCode) && StrUtil.isNotBlank(fileName)) {
                return FileInfo.builder().fileId(fileId).filePswd(authCode).fileName(fileName).build();
            }
            log.error("文件上传异常,未获取到文件ID、文件密码");
            throw new SysException("文件上传异常");
        } catch (Exception e) {
            log.error("调用建行文件上传接口异常");
            e.printStackTrace();
            throw new SysException("文件上传异常");
        }
    }

    /**
     * 将网路图片保存到本地
     *
     * @param url      文件网络地址
     * @param filePath 文件保存地址
     * @param fileName 文件名称
     */
    public static String saveFileByUrl(String url, String filePath, String fileName) {
        //String fileName = SysUtil.genFileName(url);
        //创建不同的文件夹目录
        File file = new File(filePath);
        //判断文件夹是否存在
        if (!file.exists()) {
            //如果文件夹不存在,则创建新的的文件夹
            file.mkdirs();
        }
        FileOutputStream fileOut = null;
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        try {
            // 建立链接
            URL httpUrl = new URL(url);
            conn = (HttpURLConnection) httpUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // post方式不能使用缓存
            conn.setUseCaches(false);
            //连接指定的资源
            conn.connect();
            //获取网络输入流
            inputStream = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            //判断文件的保存路径后面是否以/结尾
            if (!filePath.endsWith("/")) {
                filePath += "/";
            }
            //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
            fileOut = new FileOutputStream(filePath + fileName);
            BufferedOutputStream bos = new BufferedOutputStream(fileOut);

            byte[] buf = new byte[4096];
            int length = bis.read(buf);
            //保存文件
            while (length != -1) {
                bos.write(buf, 0, length);
                length = bis.read(buf);
            }
            bos.close();
            bis.close();
            conn.disconnect();
            return filePath + fileName;
        } catch (Exception e) {
            e.printStackTrace();
            throw new SysException("文件处理异常");
        }
    }

    /**
     * 将网路图片保存到本地
     *
     * @param url      文件网络地址
     * @param filePath 文件保存地址
     * @param fileName 文件名称
     */
    public static void saveFileByUrlAndFileName(String url, String filePath,String fileName) {
        //创建不同的文件夹目录
        File file = new File(filePath);
        //判断文件夹是否存在
        if (!file.exists()) {
            //如果文件夹不存在,则创建新的的文件夹
            file.mkdirs();
        }
        FileOutputStream fileOut = null;
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        try {
            // 建立链接
            URL httpUrl = new URL(url);
            conn = (HttpURLConnection) httpUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // post方式不能使用缓存
            conn.setUseCaches(false);
            //连接指定的资源
            conn.connect();
            //获取网络输入流
            inputStream = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            //判断文件的保存路径后面是否以/结尾
            if (!filePath.endsWith("/")) {
                filePath += "/";
            }
            //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
            fileOut = new FileOutputStream(filePath + fileName);
            BufferedOutputStream bos = new BufferedOutputStream(fileOut);

            byte[] buf = new byte[4096];
            int length = bis.read(buf);
            //保存文件
            while (length != -1) {
                bos.write(buf, 0, length);
                length = bis.read(buf);
            }
            bos.close();
            bis.close();
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            throw new SysException("文件处理异常");
        }
    }

    public static void saveFileByUrl(String url, String filePath) {
        String fileName = SysUtil.genFileName(url);
        //创建不同的文件夹目录
        File file = new File(filePath);
        //判断文件夹是否存在
        if (!file.exists()) {
            //如果文件夹不存在,则创建新的的文件夹
            file.mkdirs();
        }
        FileOutputStream fileOut = null;
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        try {
            // 建立链接
            URL httpUrl = new URL(url);
            conn = (HttpURLConnection) httpUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // post方式不能使用缓存
            conn.setUseCaches(false);
            //连接指定的资源
            conn.connect();
            //获取网络输入流
            inputStream = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            //判断文件的保存路径后面是否以/结尾
            if (!filePath.endsWith("/")) {
                filePath += "/";
            }
            //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
            fileOut = new FileOutputStream(filePath + fileName);
            BufferedOutputStream bos = new BufferedOutputStream(fileOut);

            byte[] buf = new byte[4096];
            int length = bis.read(buf);
            //保存文件
            while (length != -1) {
                bos.write(buf, 0, length);
                length = bis.read(buf);
            }
            bos.close();
            bis.close();
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            throw new SysException("文件处理异常");
        }
    }

    public static void saveFileByUrl(List<String> urls, String filePath) {
        urls.forEach(url -> SysUtil.saveFileByUrl(url, filePath));
    }


    /**
     * 推送订单时,订单编号请按照 平台方缩写+年月日时+6位数字 的格式推送
     *
     * @return 订单编号
     */
    public static String genOrderId() {
        return "LX" + DateUtil.format(LocalDateTime.now(), "yyyyMMddHH") + RandomUtil.randomInt(100000, 1000000);
    }

    /**
     * 生成文件名
     */
    public static String genFileName(String suffix) {
        return IdUtil.fastSimpleUUID() + suffix;
    }

    /**
     * 生成路径
     */
    public static String appendPath(String fileName) {
        String os = System.getProperty("os.name");

        // windows使用反斜杠
        if (StrUtil.containsIgnoreCase(os, SysInstance.SYSTEM_WINDOWS)) {
            fileName += "\\";
        } else {
            fileName += "/";
        }
        File upload = new File(fileName);
        if (!upload.exists()) {
            upload.mkdirs();
        }
        return fileName;
    }

}

 

标签:文件,String,filePath,网络,fileName,下载,本地,new,conn
来源: https://www.cnblogs.com/tangshengwei/p/15976321.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有