1.需要把jfinal的环境配置好

2.导入相关的库文件

layui的库文件

就是这两个文件需要导入到自己的页面

注意:jfinal总会把路径拦截,所以需要静态文件处理。本人不太懂。就网上找了下,说webRoot就是根目录,所以引入的时候,一定要在路径最开始加上 “/”

         作为根目录路径。

3. 接下来就是前端和后台的编写了。

前端可以直接从layui的官网上查看相关文档,就是复制粘贴,改改就可以了

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>upload模块快速使用</title><link rel="stylesheet" href="/assets/layui/css/layui.css" media="all">
</head>
<body><div class="layui-upload"><button type="button" class="layui-btn" id="test1"><i class="layui-icon"></i>上传图片</button><div class="layui-upload-list"><img class="layui-upload-img" id="demo1"><p id="demoText"></p><p id="yudu"></p></div>
</div>
<p id="download"></p>
<script src="/assets/layui/layui.js"></script><script>layui.use('upload', function(){var $ = layui.jquery,upload = layui.upload;//普通图片上传var uploadInst = upload.render({elem: '#test1',url: '/hello/handleUpload',before: function(obj){//预读本地文件示例,不支持ie8
      obj.preview(function(index, file, result){$('#demo1').attr('src', result); //图片链接(base64)
        console.log(index); //得到文件索引console.log(file); //得到文件对象//console.log(result); //得到文件base64编码,比如图片
        $("#yudu").html("<span>名字:"+file.name+"</span>"+"<span>大小:"+file.size+"</span>");});},done: function(res){//alert(res.code);//如果上传失败if(res.code > 0){return layer.msg('上传失败');}//上传成功
      layer.msg("上传成功");console.log(res.msg);$("#download").html("<a class='layui-btn layui-btn-small' href='/hello/download?name="+res.msg+"'>下载</a>");},error: function(){//演示失败状态,并实现重传var demoText = $('#demoText');demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');demoText.find('.demo-reload').on('click', function(){uploadInst.upload();});}});});
</script>
</body>
</html>

这是全部代码,如果比较懒的同学可以直接复制,这个和官网上的基本一样,只是路径做了修改,里边有几行注释调试的地方,可以删除的

4.最后就是后台控制器的代码

    /*** 上传下载*/public void upload(){render("/upload.html");}/*** 处理上传的东西,只有有方法就行。不用做处理就可以长传到默认的/upload 路径下   * 这里可以自己做优化,修改,这里每次只能上传一个文件。本人随手就写成list了*/public void handleUpload(){    //这里是为了查看信息// List<UploadFile> files = getFiles();    //补充,这样可以设置上传文件的路径,pact就是上传文件的路径,默认是在/update下,这是就是设置成了/update/pact/下,maxSize 设置文件每次上传的最大值    List<UploadFile> pacts = getFiles("pact", maxSize);System.err.println(files.get(0).getFileName());System.err.println(files.get(0).getUploadPath());System.err.println(files.get(0).getOriginalFileName());System.err.println(files.get(0).getContentType());System.err.println(files.get(0).getParameterName());    //这里为了在页面上做下载所以就需要把文件上传到服务器的名字传过去,用作下载时候调用,找到指定的文件setAttr("msg",files.get(0).getFileName());renderJson();}/*** 下载*/public void download(){    //查看传过来的文件名字,测试用// String para = getPara("name");// System.err.println(para);    //拿到下载文件所在的服务器路径String fpath = getSession().getServletContext().getRealPath("/upload");      //服务器路径和文件路径拼接File file=new File(fpath+"/"+para);  //判断文件是否存在,存在就把文件传到前端下载if(file.exists()){  renderFile(file);         }  else{  renderJson();  }  }

这样基本就没什么了,写完了。

注意这里可能会报一个错误
[ERROR]-[Thread: qtp817406040-23]-[com.jfinal.core.ActionHandler.handle()]: /hello/handleUpload
java.lang.RuntimeException: java.lang.reflect.InvocationTargetExceptionat com.jfinal.aop.Invocation.invoke(Invocation.java:87)at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:73)at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)at org.eclipse.jetty.server.Server.handle(Server.java:365)at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937)at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998)at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856)at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.jfinal.aop.Invocation.invoke(Invocation.java:73)... 25 more
Caused by: java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/FileRenamePolicyat com.jfinal.core.Controller.getFiles(Controller.java:775)at com.rjj.control.StudentControl.handleUpload(StudentControl.java:235)... 30 more
Caused by: java.lang.ClassNotFoundException: com.oreilly.servlet.multipart.FileRenamePolicyat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430)at com.jfinal.server.JFinalClassLoader.loadClass(JFinalClassLoader.java:53)... 32 more

这个问题是因为少一个jar包

只要把响应的jar导入就可以解决了。 记录自己学习过程中...

转载于:https://www.cnblogs.com/renjianjun/p/7822497.html

layui + jfinal 实现上传下载相关推荐

  1. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片

    摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件.这与浏览器的安全性机制有关,浏览器不允许用户用任意的路径访问服务器上的 ...

  2. 基于layui.upload.js 拖拽文件/文件夹上传下载

    layui.upload.js 拖拽文件/文件夹上传下载 前言 js代码 页面使用(我这里用的是uploader.jsp) CSS文件 上传效果 总结 前言 项目需求完成文件上传,可以拖拽上传文件/文 ...

  3. 后端:Layui实现文件上传功能

    今天给大家分享采用AspNet MVC+前端框架LayUi实现文件上传功能,感兴趣的朋友可以学习一下. 文件上传实体(UploadFile.cs) public class UploadFile{pu ...

  4. Jfinal 文件上传

    JFinal上传文件 uploadify 可以在http://www.uploadify.com/ 下载. 在原项目的基础上. uploadify使用: <input id="file ...

  5. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...

  6. linux快捷上传下载文件

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...

  7. Java中使用FTPClient上传下载

    转自:http://blog.csdn.net/hbcui1984/article/details/2720204 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文 ...

  8. JSP中的文件操作:数据流、File类、文件浏览、目录操作、上传下载

    ​ 文件可以永久地存储信息,从本质上讲文件就是存放在盘上的一系列数据的集合.应用程序如果想长期保存数据,就必须将数据存储到文件中,这就涉及到文件的操作.而在编写网站应用程序的过程中,有许多地方要对文件 ...

  9. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:宇的季节 cnblogs.com/chenkeyu/p/80 ...

最新文章

  1. 怎么用python读取csv文件、并且是读取行-python读取csv文件指定行的2种方法详解...
  2. chrome无法登陆账号,显示操作超时的解决方案
  3. 幼儿园带括号算式口诀_整理41组“数学顺口溜”+大九九乘法口诀表!给孩子们收藏...
  4. 不安全的食品,如何“安全地”上了货架?
  5. 【收藏】spring boot+websocket+echarts 后台推送数据用echarts展示
  6. Visual 数据绑定
  7. python3 快速排序
  8. 设计模式之Adapter设计模式
  9. [JavaScript] 使用ArrayBuffer和Blob编辑二进制流 下载文件
  10. 易语言窗口c_句柄取进程名,易语言窗口句柄取进程文件名源码
  11. php源生生成pdf_TCPDF - 可生成PDF文档和条形码PHP库
  12. protobuf协议_gRPC 使用 protobuf 构建微服务
  13. ansys命令流——点线面体基础操作(02)
  14. 无主之地1代人物和故事背景…
  15. cpu,cache,Ram,harddisk存储速度
  16. 使用Python库valuequant和每股收益历史数据计算股权价值
  17. 大学生如何应聘高薪IT职位
  18. 服务器防火墙的作用是什么?如何设置?
  19. java接口对带宽的要求,常见的接口带宽分析
  20. 【算法杂谈】LJX的迪杰斯特拉算法报告

热门文章

  1. skynet源码阅读4--定时器实现
  2. extjs6入门:用sencha cmd搭建简单的extjs6项目
  3. 实现两个虚拟域内用户相互收发邮件
  4. Android使用相机demo
  5. 推荐:安全公司的一些面试题
  6. 局域网共享设置——权限问题
  7. 《卷积神经网络》学习笔记
  8. Q88:全局光照(Global Illumination)——Path Tracing
  9. 大数据的发展体现在哪些方面
  10. javascript div 没id_javascript原生自定义轮播图组件