读取FTP服务器上的图片显示到前端页面

读取FTP服务器上的图片显示到前端页面

  • 第一种方法
    • 后端代码
    • 前端js代码
      • ftp需要的包
  • 第二张方法

第一种方法

后端代码

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

	@RequestMapping("getImage.do")
	@ResponseBody
	public void getEventPicture(HttpServletRequest request, HttpServletResponse response, String imgPath) {
		FTPClient ftp=null;
        InputStream in = null;  
        OutputStream os = null;  
        try {
        	ftp= initFTP(ftp);
        	//下载文件 FTP协议里面,规定文件名编码为iso-8859-1,所以读取时要将文件名转码为iso-8859-1
        	//如果没有设置按照UTF-8读,获取的流是空值null
        	in = ftp.retrieveFileStream(new String(imgPath.getBytes("UTF-8"), "iso-8859-1"));
        	String picType = imgPath.split("\\.")[1];
        	BufferedImage bufImg = null;
        	bufImg = ImageIO.read(in);
        	os = response.getOutputStream();
        	ImageIO.write(bufImg, picType, os);

        	} catch (IOException e) {
        		e.printStackTrace();
        	}finally {
        		if(in!=null) {
            		try {
            			in.close();
            			destroy(ftp);
            		} catch (IOException e) {
            		}
            	}
        	}
       }
       
	//通过读取ftp.properties文件来初始化ftp的参数
	private FTPClient initFTP(FTPClient ftp) throws IOException {
    	InputStream in = DevFormController.class.getResourceAsStream("/ftp.properties");
    	Properties properties=new Properties();
    	properties.load(in);
    	//url
    	String addr = properties.getProperty("ftp_url");
    	//端口号
    	int port=Integer.valueOf(properties.getProperty("ftp_port")).intValue();
    	//用户名密码
    	String username=properties.getProperty("ftp_username");
    	String password=properties.getProperty("ftp_password");
    	ftp = new FTPClient();
    	ftp.connect(addr,port);
    	ftp.login(username,password);
    	ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    	ftp.setControlEncoding("GBK");
    	ftp.setBufferSize(1024*1024*10); //设置缓冲区上传速度为10M,默认为1K
    	ftp.setFileType(FTP.BINARY_FILE_TYPE);//设置上传方式位字节      
    	ftp.enterLocalPassiveMode();//Switch to passive mode
    	return ftp;
    }
    
    //关闭FTP客户端
    private void destroy(FTPClient ftp) throws IOException {
    	if(ftp != null){
    		ftp.disconnect();
    		ftp = null;
    	}
    }

前端js代码

//中文在ie浏览器上需要encodeURI()重新编码防止参数错误
var path="testimg.jpg";
var img=").append(img);

ftp需要的包

 
 	commons-net
 	commons-net
 	3.5

第二张方法

src的形式

ftp://用户名:密码@ip地址/图片名称
<img alt="test" src="ftp://root:[email protected]/111.png"/>

不过这种ie是支持的 谷歌不支持,其他没测试

你可能感兴趣的:(技术类,前后端交互,SpringMVC开发,前段ui)