溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

layui中怎么利用jfinal實(shí)現(xiàn)上傳功能

發(fā)布時(shí)間:2021-08-09 17:11:30 來源:億速云 閱讀:124 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)layui中怎么利用jfinal實(shí)現(xiàn)上傳功能,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1、需要把jfinal的環(huán)境配置好

2、導(dǎo)入相關(guān)的庫(kù)文件

layui的庫(kù)文件

就是這兩個(gè)文件需要導(dǎo)入到自己的頁(yè)面

JFinal 是基于Java 語(yǔ)言的極速 web 開發(fā)框架,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、代碼量少、學(xué)習(xí)簡(jiǎn)單、功能強(qiáng)大、輕量級(jí)、易擴(kuò)展、Restful。在擁有Java語(yǔ)言所有優(yōu)勢(shì)的同時(shí)再擁有ruby、python等動(dòng)態(tài)語(yǔ)言的開發(fā)效率。

注意:jfinal總會(huì)把路徑攔截,所以需要靜態(tài)文件處理。本人不太懂。就網(wǎng)上找了下,說webRoot就是根目錄,所以引入的時(shí)候,一定要在路徑最開始加上 “/”

作為根目錄路徑。

3、接下來就是前端和后臺(tái)的編寫了。

前端可以直接從layui的官網(wǎng)上查看相關(guān)文檔,就是復(fù)制粘貼,改改就可以了

<!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">&#xe67c;</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){      //預(yù)讀本地文件示例,不支持ie8      obj.preview(function(index, file, result){        $('#demo1').attr('src', result); //圖片鏈接(base64)        console.log(index); //得到文件索引        console.log(file); //得到文件對(duì)象        //console.log(result); //得到文件base64編碼,比如圖片        $("#yudu").html("<span>名字:"+file.name+"</span>"+"<span>大?。?quot;+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(){      //演示失敗狀態(tài),并實(shí)現(xiàn)重傳      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>

這是全部代碼,如果比較懶的同學(xué)可以直接復(fù)制,這個(gè)和官網(wǎng)上的基本一樣,只是路徑做了修改,里邊有幾行注釋調(diào)試的地方,可以刪除的

4.最后就是后臺(tái)控制器的代碼

/**     * 上傳下載     */    public void upload(){        render("/upload.html");    }    /**     * 處理上傳的東西,只有有方法就行。不用做處理就可以長(zhǎng)傳到默認(rèn)的/upload 路徑下   * 這里可以自己做優(yōu)化,修改,這里每次只能上傳一個(gè)文件。本人隨手就寫成list了     */    public void handleUpload(){    //這里是為了查看信息       // List<UploadFile> files = getFiles();    //補(bǔ)充,這樣可以設(shè)置上傳文件的路徑,pact就是上傳文件的路徑,默認(rèn)是在/update下,這是就是設(shè)置成了/update/pact/下,maxSize 設(shè)置文件每次上傳的最大值    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());    //這里為了在頁(yè)面上做下載所以就需要把文件上傳到服務(wù)器的名字傳過去,用作下載時(shí)候調(diào)用,找到指定的文件        setAttr("msg",files.get(0).getFileName());        renderJson();    }        /**     * 下載     */    public void download(){    //查看傳過來的文件名字,測(cè)試用       // String para = getPara("name");       // System.err.println(para);    //拿到下載文件所在的服務(wù)器路徑          String fpath = getSession().getServletContext().getRealPath("/upload");      //服務(wù)器路徑和文件路徑拼接          File file=new File(fpath+"/"+para);          //判斷文件是否存在,存在就把文件傳到前端下載           if(file.exists()){              renderFile(file);                    }             else{                  renderJson();            }      }這樣基本就沒什么了,寫完了。注意這里可能會(huì)報(bào)一個(gè)錯(cuò)誤[ERROR]-[Thread: qtp817406040-23]-[com.jfinal.core.ActionHandler.handle()]: /hello/handleUploadjava.lang.RuntimeException: java.lang.reflect.InvocationTargetException    at 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.InvocationTargetException    at 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 moreCaused by: java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/FileRenamePolicy    at com.jfinal.core.Controller.getFiles(Controller.java:775)    at com.rjj.control.StudentControl.handleUpload(StudentControl.java:235)    ... 30 moreCaused by: java.lang.ClassNotFoundException: com.oreilly.servlet.multipart.FileRenamePolicy    at 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

以上就是layui中怎么利用jfinal實(shí)現(xiàn)上傳功能,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI