JFinal文件上传

JFinal的文件上传功能

JFianl的上传有多种方法 ajax上传、from上传。这次用到的是from上传。

之前做过一个人员统计,现在有一个新需求,针对每个录入的人,再录入的过程中加入文件上传,每个人有个身份证复印件和电子版简历需要上传到系统上。如果上传到同一个地方肯定很不方便。把每个人的身份证复印件和简历放在这个人名字下的文件夹中,及简介又方便。

难点:根据个人去创建个人文件夹来存放单人信息。
思路:在录入过程肯定会有名字,再上传的过程中去传递这个参数。再以这个名字去mkdir文件夹,存放文件。

我将上传加入到 每个人的操作选项中。
在这里插入图片描述
这么做可以避免先上传无法创建文件的问题。
前端页面的代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>上传附件</title>
    <link rel="stylesheet" href="${ctx}/static/admin/layui/css/layui.css">
</head>
<body>
     <form class="layui-form layui-form-pane"  action="${ctx}/sys/cmkj/uploadFile" enctype="multipart/form-data" method="post">
          <div class="layui-form-item">
             <label class="layui-form-label">身份证上传</label>
              <input type="hidden" name="name" value="${chuangmeng.name}">
              <div class="layui-input-block">
                 <input type="file" name="file" />
                 <button type="submit"  class="layui-btn">提交</button>
              </div>
          </div>
          <div class="layui-form-item">
             <label class="layui-form-label">简历上传</label>
             <input type="hidden" name="name" value="${chuangmeng.name}">
             <div class="layui-input-block">
                 <input type="file" name="file" />
                 <button type="submit"  class="layui-btn">提交</button>
             </div>
          </div>
     </form>
</body>
</html>

然后是Controller层代码:

public void uploadFile(){
		UploadFile uploadFile=this.getFile();
		String name = getPara ("name");

		String fileName=uploadFile.getOriginalFileName();
		File file=uploadFile.getFile();
		Chuangmeng fs=new Chuangmeng();

		File t=new File("D:\\file\\"+name+"\\"+fileName);

		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		if (!t.getParentFile().exists()) {
			t.getParentFile().mkdirs();
		}
		try {
			t.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		fs.fileChannelCopy(file, t);
		file.delete();
		this.renderHtml("success,<a href=\"./\">back</a>");
	}

控制层需要注意一个问题:

String name = getPara ("name");

传递参数的语句不能写在最开始
要加在

UploadFile uploadFile=this.getFile();

的下面。如果写在上边传递的参数则为null。

创建个人文件夹:

File t=new File("D:\\file\\"+name+"\\"+fileName);

		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		if (!t.getParentFile().exists()) {
			t.getParentFile().mkdirs();
		}

上传的文件 保留原文件名。字符串的拼接一定要注意。

接着是服务层的代码:

public void fileChannelCopy(File s, File t) {
		FileInputStream fi = null;
		FileOutputStream fo = null;
		FileChannel in = null;
		FileChannel out = null;
		try {
			fi = new FileInputStream(s);
			fo = new FileOutputStream(t);
			in = fi.getChannel();// 得到对应的文件通道
			out = fo.getChannel();// 得到对应的文件通道
			in.transferTo(0, in.size(), out);// 连接两个通道,并且从in通道读取,然后写入out通道
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fi.close();
				in.close();
				fo.close();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

这就是 整个from上传流程的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值