场景描述:
在做与第三方对接时,对方直接给我一个ftp链接,然后我通过这个连接复制到浏览器中可以直接拿到文件,但是菜鸟一个,不知道怎样去用代码处理。以为可以直接通过链接访问就可以拿到图片,但是试了不可以,还是要经过处理才可以获取图片等信息。
声明:
代码大部分是借鉴网上的,写这篇博客只是为了学习一下,希望也可以给大家一点点小小的帮助,如有问题,欢迎各位大佬指正。
注意问题:
哪怕你直接可以用链接在浏览器中拿到文件或图片,也需要去设置登录和ip和端口号等信息。
public static String getImage(String url,String filename) throws Exception { FTPClient ftp = new FTPClient(); //创建一个ftp对象 String fileNames = null; //文件名 StringBuffer filesN = null; try{ ftp.connect(); //设置ip和端口 ftp.login(); //设置用户名和密码 ftp.setFileType(FTPClient.BINARY_FILE_TYPE); int replyCode = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(replyCode)){ ftp.disconnect(); } ftp.enterLocalPassiveMode(); //获取文件流 ByteArrayOutputStream baos = null; boolean chage = ftp.changeWorkingDirectory(url); //判断切换目录是否成功 System.out.println("是否切换目录成功"+chage); InputStream retrieveFileStream = ftp.retrieveFileStream(new String(filename.getBytes("UTF-8"),"iso-8859-1")); //读取相应文件名的文件 if (null == retrieveFileStream) { throw new FileNotFoundException(filename); } baos = new ByteArrayOutputStream(); int length; byte[] buf = new byte[2048]; while (-1 != (length = retrieveFileStream.read(buf, 0, buf.length))) { baos.write(buf, 0, length); } ByteArrayInputStream fis = new ByteArrayInputStream(baos.toByteArray()); baos.flush(); baos.close(); byte[] buffer = new byte[fis.available()]; int offset = 0; int numRead = 0; while (offset < buffer.length && (numRead = fis.read(buffer, offset, buffer.length - offset)) >= 0) { offset += numRead; } if (offset != buffer.length) { throw new IOException("Could not completely read file "); } fis.close(); String asB64 = new base64Encoder().encode(buffer); //进行base64转码 fileNames = asB64; retrieveFileStream.close(); ftp.completePendingCommand(); }catch (Exception e) { e.printStackTrace(); }finally{ if(ftp!=null&&ftp.isConnected()) { try { ftp.disconnect(); }catch (Exception e){ e.printStackTrace(); } } } return fileNames; }
前端接收:
img = "data:image/jpeg;base64," + data; //对后台返回的base64流进行处理 //然后用image里面的src属性可以直接引用 $('#img').prop('src',img);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)