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"/>

效果如下:

.

JFinal向客户端渲染图片的方法的更多相关文章

  1. 基于html5 canvas 的客户端异步上传图片的插件,支持客户端压缩图片尺寸

    /** * Created by xx on 15-05-28. * 基于html5 canvas 的客户端异步上传画片的插件 * 在实际应用中,常常要用于上传图片的功能.在现在越来越多的手机weba ...

  2. PHP《将画布(canvas)图像保存成本地图片的方法》

    用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审 ...

  3. Android 圆形/圆角图片的方法

    Android 圆形/圆角图片的方法 眼下网上有非常多圆角图片的实例,Github上也有一些成熟的项目.之前做项目,为了稳定高效都是选用Github上的项目直接用.但这样的结束也是Android开发必 ...

  4. 截取完整网页图片的方法 Chrome 浏览器

    截取完整网页图片的方法:https://sspai.com/post/42193 要想使用截图功能,你需要首先确保 Chrome 已升级至 59 或更高版本.在想要截图的网页中,首先按下 ⌘Comma ...

  5. canvas性能-drawImage渲染图片

    canvas性能-绘制图片 目录 canvas性能-绘制图片 canvas绘制图片 drawImage putImageData createPattern 测试绘制耗时 drawImage Imag ...

  6. uniapp微信小程序保存base64格式图片的方法

    uniapp保存base64格式图片的方法首先第一要先获取用户的权限 saveAlbum(){//获取权限保存相册 uni.getSetting({//获取用户的当前设置 success:(res)= ...

  7. android图片处理方法

    Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...

  8. iOS给图片添加滤镜&使用openGLES动态渲染图片

    给图片增加滤镜有这两种方式: CoreImage / openGLES 下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤: #1.导入CIImage格式的原始图片 #2.创建CIF ...

  9. canvas代替img渲染图片

    移动端用canvas代替img渲染图片,可以提高性能 var oImg = new Image(); oImg.src = url; oImg.onload = function(){ var cvs ...

随机推荐

  1. 【第九周】psp

        代码累计 300+575+475+353+620=2223 随笔字数 1700+3000+3785+4210+4333=17695 知识点 java反射机制 数据库技术 动态规划算法 pyth ...

  2. PAT 甲级 1020 Tree Traversals

    https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072 Suppose that all the k ...

  3. Python @retry装饰器的使用与实现案例(requests请求失败并重复请求)

    在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重试请求,这种情况下,如果想优雅的实现功能,可以学习下retrying包下的retry装饰 ...

  4. 【codevs1163】访问艺术馆 树形dp

    题目描述 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的 ...

  5. day4 列表 增删改查 元组

    增lis=["a","b","c",5,7,4]lis.append("s")#在列表的末尾追加lis.extend(& ...

  6. 转:SVM与SVR支持向量机原理学习与思考(一)

    SVM与SVR支持向量机原理学习与思考(一) 转:http://tonysh-thu.blogspot.com/2009/07/svmsvr.html 弱弱的看了看老掉牙的支持向量机(Support ...

  7. 【bzoj2893】征服王

    Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个 ...

  8. 03-树3. Tree Traversals Again (25)将先序遍历和中序遍历转为后序遍历

    03-树3. Tree Traversals Again (25) 题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%913 An inorde ...

  9. 03-树2. List Leaves (25) 二叉树的层序遍历

    03-树2. List Leaves (25) 题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%912 Given a tree, you a ...

  10. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...