JFinal 文件上传下载
JFinal 文件上传下载
lewjun072 发表于4年前
JFinal 文件上传下载
  • 发表于 4年前
  • 阅读 572
  • 收藏 3
  • 点赞 1
  • 评论 3

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: JFinal 文件上传下载

自备忘一个

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;




共有 人打赏支持
粉丝 0
博文 2
码字总数 926
评论 (3)
JFinal
感谢分享,顶一个 79
lewjun072

引用来自“JFinal”的评论

感谢分享,顶一个 79
ordinance
请问代码中的两个uf是什么意思?
×
lewjun072
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: