ICode9

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

跨域请求ftp服务器获取图片文件,并以base64格式返回给前端

2021-11-16 20:02:50  阅读:220  来源: 互联网

标签:ftp 跨域 base64 baos length offset new String


场景描述:

在做与第三方对接时,对方直接给我一个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);

标签:ftp,跨域,base64,baos,length,offset,new,String
来源: https://blog.csdn.net/weixin_46605877/article/details/121355408

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

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

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

ICode9版权所有