zoukankan      html  css  js  c++  java
  • JFinal向客户端渲染图片的方法

    JFinal提供了好几种方便的render但是不知道为啥就是没有提供直接渲染图片的render,如果我们直接在Controller的方法中往输入流中写的话是还是会有默认的render生效的,比如下面这种:

    (示范错误情况,请勿模仿)

    /**
     * 显示图像
     */
    public void showPic(){
    	
    	String filename=getPara("name");
    	if(!securityCheck(filename)){
    		return ;
    	}
    	
    	File imgFile=new File(ConstantRepo.BASE_UPLOAD_FILE_PATH+"/"+filename);
    	try {
    		FileUtils.copyFile(imgFile, getResponse().getOutputStream());
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    }

    尽管我们手动的往response的OutputStream中写了东西,但是因为还会有一个默认的render使用当前的方法名作为返回值,这会导致在客户端报404.

    这个时候我们自定义一个Render来专门渲染图片,当我们指定了默认的Render的时候默认的就不再生效,下面是一个可以将图片渲染到输出流的Render,与CaptchaRender类似:

    import java.io.File;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    
    import com.jfinal.render.Render;
    
    /**
     * 
     * 用来向客户端渲染图片
     * 
     * @author CC11001100
     *
     */
    public class ImageRender extends Render {
    	
    	/**要渲染到客户端去的图像文件*/
    	private File imgFile;
    	
    	public ImageRender(File imgFile) {
    		super();
    		this.imgFile = imgFile;
    	}
    
    	public File getImgFile() {
    		return imgFile;
    	}
    
    	public void setImgFile(File imgFile) {
    		this.imgFile = imgFile;
    	}
    
    	/**
    	 * 将特定的图片写回到客户端
    	 */
    	public void render() {
    		response.setContentType("image/jpeg");
    		try {
    			FileUtils.copyFile(imgFile, response.getOutputStream());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    }

    需要注意上面使用了Apache commons-io,引入maven依赖:

    <!-- common-io依赖 -->
    <dependency>
    	<groupId>commons-io</groupId>
    	<artifactId>commons-io</artifactId>
    	<version>2.4</version>
    </dependency>

    将要渲染的图片文件传进去,同时指定要使用的渲染器即可:

    /**
     * 显示图像
     */
    public void showPic(){
    	
    	String filename=getPara("name");
    	if(!securityCheck(filename)){
    		return ;
    	}
    	
    	File imgFile=new File(ConstantRepo.BASE_UPLOAD_FILE_PATH+"/"+filename);
    	render(new ImageRender(imgFile));
    }

    比如用来显示用户头像:

    <img src="<c:url value="/file/showPic?name=${user.avatar}"/>" class="user-avatar"/>

    效果如下:

    image

    .

  • 相关阅读:
    Jmeter索引贴
    Jenkins Jmeter Tomcat Html实施方案
    转载:几种方法来实现scp拷贝时无需输入密码
    Jenkins Jmeter Ant Email Html实施方案
    zabbix3.4 zabbix-server zabbix-agent zabbix-java-gateway安装 配置
    shell () {}
    Vuser中常用的C语言函数
    loadrunner C语言循环for while do...while
    loadrunner C语言switch case
    linux系统扫描技术及安全防范--------待补全
  • 原文地址:https://www.cnblogs.com/cc11001100/p/6864751.html
Copyright © 2011-2022 走看看