package com.ann.utils; import com.ann.entity.constant.AliasName; import jcifs.smb.SmbFile; import jcifs.smb.SmbFileInputStream; import org.apache.commons.net.ftp.FTPClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.Objects; /** * @Description 下载工具 * @Date 2019/7/2 16:56 * @Created by ljx */ public class DownloadUtils { static final Logger logger = LoggerFactory.getLogger(DownloadUtils.class); /** * 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static boolean downLoadByUrl(String urlStr, String fileName, String savePath) throws IOException { URL url = null; InputStream inputStream = null; FileOutputStream fos = null; boolean result = false; try { String s1 = urlStr.substring(0, urlStr.lastIndexOf("/")+1); String s2 = urlStr.substring(urlStr.lastIndexOf("/")+1, urlStr.length()); url = new URL(s1 +URLEncoder.encode(s2, "utf-8")); // url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置超时间为5秒 conn.setConnectTimeout(5 * 1000); //防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //得到输入流 inputStream = conn.getInputStream(); //获取自己数组 byte[] getData = readInputStream(inputStream); //文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdir(); } File file = new File(saveDir + File.separator + fileName); fos = new FileOutputStream(file); fos.write(getData); result = true; } catch (MalformedURLException e) { throw e; } catch (FileNotFoundException e) { throw e; } catch (IOException e) { throw e; } finally { try { if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { throw e; } } return result; } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ 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(); } //从共享目录下载文件 public static boolean cmdFile(String path, File imageFile) throws IOException { boolean result = false; BufferedInputStream in = null; BufferedOutputStream out = null; try { String tempIp = path.substring(2, path.length()); String ip = tempIp.substring(0, tempIp.indexOf("/")); Process exec = Runtime.getRuntime().exec("net use \\\\" + ip + " his /user:his"); in = new BufferedInputStream(new FileInputStream(path)); out = new BufferedOutputStream(new FileOutputStream(imageFile)); byte[] buffer = new byte[1024]; while (in.read(buffer) != -1) { out.write(buffer); buffer = new byte[1024]; } out.flush(); exec.destroy(); result = true; } catch (IOException e) { FileUtils.deleteImageFile(imageFile); throw e; } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException e) { FileUtils.deleteImageFile(imageFile); throw e; } } return result; } public static boolean downloadImageFile(String address, String type, File imageFile) throws Exception { //--------------------------------------------此处判断下 是否http 也有可能传图片 共享也有可能传pdf 还有考虑ftp 这两种情况 if (address.indexOf("http") != -1) { // http协议 return true; } else if (address.indexOf("ftp") != -1) { if (Objects.equals(type, AliasName.EKG_REPORT)) { // ftp://PTVIEW:MedExTech@10.6.0.65:10021/ecgdata/ECG/2019-07-24/MECGCAS1907240069_1.jpg address = address.substring(address.indexOf("/") + 2, address.length()); String ftpAccount = address.substring(0, address.indexOf("@")); String[] split = ftpAccount.split(":"); address = address.substring(address.indexOf("@") + 1, address.length()); String url = address.substring(0, address.indexOf(":")); Integer port = 0; if (address.indexOf(":") != -1 && address.indexOf("/") != -1) { port = Integer.parseInt(address.substring(address.indexOf(":") + 1, address.indexOf("/"))); } String path = address.substring(address.indexOf("/"), address.length()); FTPClient ftpClient = FTPUtil.connectFtpServer(url, port, split[0], split[1]); return FTPUtil.downloadFtp(path, ftpClient, imageFile); } } else { // 共享文件 // //10.6.0.74/Images/201907_U/Report609639_1.jpg address = address.replaceAll("\\\\", "/"); return DownloadUtils.cmdFile(address, imageFile); //return true } return false; } public static String downLoadPdfFile(File pdfFile, String address, String type) throws Exception { if (address.indexOf("http") != -1) { // 放射 http://10.6.0.144/PDF/b74abb84-3524-442e-b0af-0d3966c9b979.pdf if (DownloadUtils.downLoadByUrl(address, pdfFile.getName(), pdfFile.getParent())) { return pdfFile.getAbsolutePath(); } } else if (address.indexOf("ftp") != -1) { String url = ""; String path = ""; Integer port = 21; // 处理 “/” if (address.indexOf("/") == -1) { address = address.replace("\\", "/"); } address = address.substring(address.indexOf("/") + 2, address.length()); path = address.substring(address.indexOf("/"), address.length()); //处理url 以及端口 如果有端口 截取 否则默认端口 if (address.indexOf(":") != -1 && address.indexOf("/") != -1) { port = Integer.parseInt(address.substring(address.indexOf(":") + 1, address.indexOf("/"))); url = address.substring(0, address.indexOf(":")); } else { url = address.substring(0, address.indexOf("/")); } String userName = ""; String password = ""; if (Objects.equals(type, AliasName.HANDNUMBNESS_REPORT)) { // 手麻 ftp://10.6.0.75/600/000360639/1/000360639600_1_麻醉_麻醉单_1_1.pdf userName = "mdsd"; password = "mdsd"; } else if (Objects.equals(type, AliasName.INSPECTION_REPORT)) { // 检验报告 ftp://10.6.1.128:23/LIS/20200228/1003620200228121.pdf userName = "common"; password = "common"; } else if (Objects.equals(type, AliasName.PETCT_REPORT)) { //petct报告 ftp:\\10.2.1.25:2121\201909\21\E19090279\E19090279_FT200_161712285.pdf userName = "view"; password = "view"; } else if (Objects.equals(type, AliasName.BLOODAPPLY_REPORT)) { // 输血 ftp://10.6.1.128/tmis/10_000526962900_9_LCFXD191021010_临床发血单.PDF userName = "common"; password = "common"; } else if (Objects.equals(type, AliasName.ICU_REPORT)) { // icu ftp://10.6.0.241/fallSheets/徐晓峰-988874-2020-02-25 - 2020-03-21.pdf; userName = "zingicu"; password = "zingicu123"; } else if(Objects.equals(type, AliasName.PRN) || Objects.equals(type, AliasName.SOS)) { // 长期医嘱/临时医嘱 ftp://10.6.1.16:21/1147_1_long.pdf userName = "his"; password = "his_docus"; }else if(Objects.equals(type, AliasName.OTHER_REPORT)) { //其他报告 根据IP区分报告类型 考虑IP单独做配置 userName = ""; password = ""; }else { // 电子病历 // ftp://10.6.0.155/2020-01-25/000593857900_1_000593857900_0_4_EMR06.02.04_3_5_0.pdf // ftp://10.6.0.155/000538888400_2_吴惠/病历文书/12440000455858169P-000538888400-2-2-0-29.pdf userName = "pdf"; password = "pdf"; } FTPClient ftpClient = FTPUtil.connectFtpServer(url, port, userName, password); if (FTPUtil.downloadFtp(path, ftpClient, pdfFile)) { return pdfFile.getAbsolutePath(); } } return null; } /** * 下载多个文件 */ public static String downloadImageFiles(String address, String imageDir) throws Exception { // ftp://10.6.0.241/02019-08-29.png;ftp://10.6.0.241/12019-08-29.png String[] split = address.split(";"); String imagesPath = ""; int i = 1; for (String addr : split) { addr = addr.substring(addr.indexOf("/") + 2, addr.length()); String url = addr.substring(0, addr.indexOf("/")); String path = addr.substring(addr.indexOf("/") + 1, addr.length()); // 1.连接到指定的服务器 JSchUtils.connect("zingicu", "zingicu123", url, 22); // 2.下载文件 JSchUtils.download(path, imageDir); // 4.关闭连接 JSchUtils.close(); //截取文件夹 path = path.substring(path.indexOf("/") + 1, path.length()); imagesPath += imageDir + "\\" + path + ";"; i++; } return imagesPath; } public static void main(String[] args) throws IOException { //10.6.0.217/images/201909_Z/ReportBB818E8E-E93A-46E8-A8B1-F789677BC0D8.1.jpg //10.6.0.74/Images/201909_U/Report617970_1.jpg //File imageFile = FileUtils.createFile("images","2019", "9","haha"); //smbGet("smb://his:his@10.6.0.217/images/201909_Z/ReportBB818E8E-E93A-46E8-A8B1-F789677BC0D8.1.jpg", imageFile.getParent()); } public static void smbGet(String remoteUrl, String localDir) { InputStream in = null; OutputStream out = null; try { SmbFile remoteFile = new SmbFile(remoteUrl); if (remoteFile == null) { System.out.println("共享文件不存在"); return; } String fileName = remoteFile.getName(); File localFile = new File(localDir + File.separator + fileName); in = new BufferedInputStream(new SmbFileInputStream(remoteFile)); out = new BufferedOutputStream(new FileOutputStream(localFile)); byte[] buffer = new byte[1024]; while (in.read(buffer) != -1) { out.write(buffer); buffer = new byte[1024]; } } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } }