文档章节

JFinal 文件上传下载

lewjun072
 lewjun072
发布于 2014/06/06 18:55
字数 881
阅读 656
收藏 3

自备忘一个

1、加入 JAR 包

以 JFinal 官方提供的 jfinal_demo 实例为基础。

首先在 lib 目录下加入 cos-26Dec2008.jar 包,和文件操作辅助包 commons-io-2.4.jar(这里要

用到 byte[] org.apache.commons.io.IOUtils.toByteArray(InputStream input) throws IOException

和 void org.apache.commons.io.IOUtils.write(byte[] data, OutputStream output) throws

IOException)。

2、加入前端页面

添加文件“WebRoot\wenjian\_form.html、

WebRoot\wenjian\add.html、WebRoot\wenjian\wenjian.html”。

_form.html

<fieldset class="solid">
<legend>上传文件</legend>
<div>
<label>保存位置</label>
<label><input type="radio" name="wenjian.bcwz"
value="DB" checked="checked" />DB</label>
<label><input type="radio" name="wenjian.bcwz"
value="FILE" />FILE</label>
</div>
<div>
<label>文件</label>
<input type="file" name="wenjian.file" />
</div>
<div>
<label>&nbsp;</label>
<input value="提交" type="submit">
</div>
</fieldset>

add.html

<#include "/common/_layout.html" />
<@layout>
<h1>文件管理 ---&gt; 上传文件
</h1>
<div class="form_box">
<form action="/wenjian/save" method="post"
enctype="multipart/form-data">
<#include "_form.html" />
</form>
</div>
</@layout>

wenjian.html

<#include "/common/_layout.html"/>
<@layout>
<h1>文件管理&nbsp;&nbsp;
<a href="/wenjian/add">创建文件</a>
</h1>
<div class="table_box">
<table class="list">
<tbody>
<tr>
<th width="4%">id</th>
<th width="35%">标题</th>
<th width="12%">操作</th>
</tr>
<#list wenjianPage.getList() as x>
<tr>
<td style="text-align:left;">${x.id}</td>
<td style="text-align:left;">${x.title}</td>
<td style="text-align:left;">
&nbsp;&nbsp;<a
href="/wenjian/delete/${x.id}">删除</a>
&nbsp;&nbsp;<a
href="/wenjian/download/${x.id}">下载</a>
</td>
</tr>
</#list>
</tbody>
</table>
<#include "/common/_paginate.html" />
<@paginate currentPage=wenjianPage.pageNumber
totalPage=wenjianPage.totalPage actionUrl="/wenjian/" />
</div>
</@layout>

3、添加后台文件

Wenjian.java

package com.demo.wenjian;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Page;
/*
mysql> desc wenjian;
+-------+--------------+------+-----+---------+----------
------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------
------+
| id | int(11) | NO | PRI | NULL | auto_increment
|
| title | varchar(255) | NO | | NULL | |
| size | varchar(255) | NO | | NULL | |
| file | longblob | YES | | NULL | |
| bcwz | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------
------+
5 rows in set
mysql>
*/
public class Wenjian extends Model<Wenjian> {
private static final long serialVersionUID = -745596151448052489L;
public static final Wenjian dao = new Wenjian();
public Page<Wenjian> paginate(int pageNumber, int pageSize) {
return paginate(pageNumber, pageSize, "select id, title ", "from wenjian order by id asc");
}
}

WenjianController.java

package com.demo.wenjian;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
import org.apache.commons.io.IOUtils;
import com.jfinal.core.Controller;
import com.jfinal.upload.UploadFile;
public class WenjianController extends Controller {
public void index() {
setAttr("wenjianPage",
Wenjian.dao.paginate(getParaToInt(0, 1), 10));
render("wenjian.html");
}
public void add() {
}
/**
* 文件上传
*/
public void save() {
//
UploadFile uf = getFile();// 注意在有文件上传时,getFile一定要放在第一行处理,至少要放在getPara系列方法之前。否则出现的问题可能检查不出来。
UploadFile uf = getFile("wenjian.file", "f");// 将会在指定的文件夹下创建f文件夹,然后创建文件
String title = uf.getFileName();
Long length = uf.getFile().length();
System.out.println(uf.getSaveDirectory() +File.separator + uf.getFileName());
System.out.println( uf.getOriginalFileName() );//getOriginalFileName 和 getFileName的区别是,前者获得的是文件原本的文件名,后者获取的是处理过的文件名
//System.out.println( PathKit.getWebRootPath() );//
String bcwz = getPara("wenjian.bcwz");
System.out.println(bcwz);
if("DB".equals(bcwz)) {
try {
new Wenjian().set("title", title).set("size",length).set("file", IOUtils.toByteArray(newFileInputStream(uf.getFile()))).save();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
new Wenjian().set("title", title).set("size", length).set("file", null).set("bcwz",uf.getSaveDirectory() + File.separator + uf.getFileName()).save();
}
redirect("/wenjian");
}
public void delete() {
Wenjian.dao.deleteById(getParaToInt());
redirect("/wenjian");
}
/**
* 文件下载
*/
public void download() {
Wenjian wenjian =
Wenjian.dao.findById(getParaToInt());
String bcwz = wenjian.get("bcwz");
if(bcwz == null || bcwz.trim().length() == 0) {// 来自数据库
byte[] bfile = wenjian.getBytes("file");
String title = wenjian.get("title");
File file = null;
OutputStream output = null;
try {
file = File.createTempFile(UUID.randomUUID().toString(), title);
} catch (IOException e) {
e.printStackTrace();
}
try {
output = new FileOutputStream(file);
IOUtils.write(bfile, output);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
renderFile(file);
return;
} else {// 来自文件
renderFile(new File(bcwz));
return;
}
}
}

4、配置 DemoConfig.java

/**
* 配置常量
*/
public void configConstant(Constants me) {
// 加载少量必要配置,随后可用getProperty(...)获取值
loadPropertyFile("a_little_config.txt");
me.setDevMode(getPropertyToBoolean("devMode", false));
me.setUploadedFileSaveDirectory(File.separator +
"uploadFiles" + File.separator);// 设定文件保存 位置。默认是项目下的upload,因为项目是部署在D盘下的一个目录下的,所以这将在D盘下。保存在固定文件夹下-> me.setUploadedFileSaveDirectory("C:" + File.separator+ "uploadFiles" + File.separator);
}
/**
* 配置路由
*/
public void configRoute(Routes me) {
me.add("/wenjian", WenjianController.class);
}
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
arp.addMapping("wenjian", Wenjian.class); // 映射wenjian 表到 Wenjian模型
}

5、添加表

CREATE TABLE `wenjian` (
&igrave;d&igrave;nt(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`size` varchar(255) NOT NULL,
`file` longblob,
`bcwz` varchar(255) DEFAULT NULL,
PRIMARY KEY (&igrave;d`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;




© 著作权归作者所有

共有 人打赏支持
lewjun072
粉丝 0
博文 2
码字总数 926
作品 0
成都
私信 提问
加载中

评论(3)

ordinance
ordinance
请问代码中的两个uf是什么意思?
lewjun072
lewjun072

引用来自“JFinal”的评论

感谢分享,顶一个 79
JFinal
JFinal
感谢分享,顶一个 79
JFinal文件上传问题

@JFinal 你好,想跟你请教个问题: 新手刚学习JFianl 遇见一个问题,关于文件上传的: UploadFile uploadFile = getFile("file")或者UploadFile uploadFile = getFile(getPara("file")); 如果...

火龙战士
2016/05/31
194
1
COS 2017.5 发布,Java 文件上传组件

老牌轻量级 java web 文件上传组件 cos 已多年未更新过,cos-2017.5 版本根据 JFinal 用户反馈比较多的几个需求进行了升级: 1:支持文件上传表单域使用同名的 name属性 上例中的 input 表单...

JFinal
2017/05/31
2.6K
38
JFinal处理文件上传应该注意的问题

JFinal处理文件上传的时候,保存文件什么的都没有问题。需要注意的地方就是你保存好了文件,打算返回Json格式的数据的时候注意了: setAttr("xxx", xxx);setAttr("xxx", xxx);renderJson();或...

无聊的人们啊
2012/04/17
0
6
JFinal 2.1 最终版发布,用JFinal开发,就这么定了!

由于 jfinal 2.1 在不完全统计的情况下有超过60项的升级与改进,所以自发布这几天以来,立即收到了大量的使用反馈,为了使开发者尽可能快地用上反馈后的新版本,本次jfinal 2.1延迟了推送到m...

JFinal
2016/01/11
6.4K
62
在执行异步文件上传后返回的json 火狐没问题ie提示下载

@JFinal 你好,想跟你请教个问题:在执行异步文件上传后返回的json 火狐没问题,ie提示下载 JFinal +freemarker 上代码 js代码,html代码。引入jquery.upload.js(最下面已贴出) 下面是jquer...

junjichu
2015/01/07
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

线下工坊|Blockchain Coding Day:零基础教你开发DAPP(北京)

我们的目标是通过编程学习让你更了解区块链技术。这将对区块链开发初学者一次很好的体验。这里需要强调一下,编程零基础也能学会。 我们将以小组的形式,由教练带领学员完成DAPP开发。每位学...

HiBlock
18分钟前
1
0
查看内存情况

jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。...

Canaan_
19分钟前
2
0
基于对象特征的推荐

(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 在上一期基于协同过滤的的推荐场景中,我们介绍了如何通过PAI快速搭建一个基于协同过滤方案的推荐系统,这一节会介绍一些如何基...

阿里云官方博客
27分钟前
1
0
Ugly Number(leetcode263)

Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. Example 1: Input: 6Output: true......

woshixin
50分钟前
2
0
深度模型从研者 眼里的 似然估计 & Hessain 海森矩阵 & Fisher Information (费雪信息)

深度模型的训练的基本依据是最小化模型拟合数据的误差。旨在不仅知其然(如何构建和训练一个深度模型),还应知其所以然(为什么这样训练,可以做哪些优化)。我们就会发现,有很多研究者,在...

刘小米_思聪
55分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部