IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 跨域请求ftp服务器获取图片文件,并以base64格式返回给前端 -> 正文阅读

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

场景描述:

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 13:09:07  更:2021-11-17 13:10:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:17:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码