java Springboot實現(xiàn)多文件上傳功能
前端采用layui框架,講解多文件上傳的完整實現(xiàn)功能。
前端html重點代碼如下:
<div class="layui-form-item"> <label class="layui-form-label">上傳文件</label> <div class="layui-input-block"> <div class="layui-upload"> <button type="button" class="layui-btn layui-btn-normal" id="testList">選擇多文件</button> <div class="layui-upload-list"> <table class="layui-table"> <thead> <tr><th>文件名</th> <th>大小</th> <th>狀態(tài)</th> <th>操作</th> </tr></thead> <tbody id="demoList"></tbody> </table> </div> <button type="button" class="layui-btn" id="testListAction">開始上傳</button> </div> </div> </div>
相應(yīng)的,js代碼如下所示:
layui.use('upload', function(){
var $ = layui.jquery,upload = layui.upload;
//多文件列表示例
var demoListView = $('#demoList')
,uploadListIns = upload.render({
elem: '#testList'
,url: '/upload'
,accept: 'file'
,data:{} //可放擴展數(shù)據(jù) key-value
,multiple: true
,auto: false
,bindAction: '#testListAction'
,choose: function(obj){
var files = this.files = obj.pushFile(); //將每次選擇的文件追加到文件隊列
//讀取本地文件
obj.preview(function(index, file, result){
var tr = $(['<tr id="upload-'+ index +'">'
,'<td>'+ file.name +'</td>'
,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
,'<td>等待上傳</td>'
,'<td>'
,'<button class="layui-btn layui-btn-mini demo-reload layui-hide">重傳</button>'
,'<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">刪除</button>'
,'</td>'
,'</tr>'].join(''));
//單個重傳
tr.find('.demo-reload').on('click', function(){
obj.upload(index, file);
});
//刪除
tr.find('.demo-delete').on('click', function(){
delete files[index]; //刪除對應(yīng)的文件
tr.remove();
uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免刪除后出現(xiàn)同名文件不可選
});
demoListView.append(tr);
});
}
,done: function(res, index, upload){
if(res.code == 0) //上傳成功
var tr = demoListView.find('tr#upload-'+ index)
,tds = tr.children();
tds.eq(2).html('<span style="color: #5FB878;">上傳成功</span>');
tds.eq(3).html(''); //清空操作
return delete this.files[index]; //刪除文件隊列已經(jīng)上傳成功的文件
} //code為后臺傳回來的數(shù)據(jù),具體多少自己定,
//后臺只能傳回json格式數(shù)據(jù),不然會走error函數(shù);
,error: function(index, upload){
}
})
});
以上即是前端功能的實現(xiàn),后端方面,在Service層Impl下創(chuàng)建文件上傳的函數(shù):
public String uploadNoticeFile(MultipartFile fileList) {
try{
String pathname = filepath;
String timeMillis = Long.toString(System.currentTimeMillis());//時間戳
String filename = timeMillis + fileList.getOriginalFilename();
File dir = new File(pathname);
if (!dir.exists()) {
dir.mkdirs();
}
String filepath = pathname + filename;
File serverFile = new File(filepath);
fileList.transferTo(serverFile);
//存入數(shù)據(jù)庫
NoticeFile noticeFile = new NoticeFile();
noticeFile.setNoFileName(filename);
noticeFile.setNoFilePath(filepath);
noticeFile.setNoId(0L);
noticeFileRepository.save(noticeFile);
return "1";
}catch (Exception e) {
e.printStackTrace();
return "0";
}
}
NoticeFile是我個人在寫項目時創(chuàng)建的類,讀者可根據(jù)實際情況自行運用。
然后,在controller層中創(chuàng)建相應(yīng)的函數(shù):
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> noticeFile(@RequestParam(name = "file") MultipartFile files) {
String msg = noticeFileService.uploadNoticeFile(files);
Map map = new HashMap();
if (msg == "1") {
map.put("code", "0");
} else {
map.put("code", "1");
}
return map;
}
以上,即實現(xiàn)了多文件上傳的全部功能。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot實現(xiàn)消息的發(fā)送和接收使用實戰(zhàn)指南
這篇文章主要為大家介紹了Spring?Boot實現(xiàn)消息的發(fā)送和接收使用實戰(zhàn)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
關(guān)于Java 項目封裝sqlite連接池操作持久化數(shù)據(jù)的方法
這篇文章主要介紹了Java 項目封裝sqlite連接池操作持久化數(shù)據(jù)的方法,文中給大家介紹了sqlite的體系結(jié)構(gòu)及封裝java的sqlite連接池的詳細過程,需要的朋友可以參考下2021-11-11
springcloud如何使用Feign后臺內(nèi)部傳遞MultipartFile
這篇文章主要介紹了springcloud如何使用Feign后臺內(nèi)部傳遞MultipartFile,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java的this關(guān)鍵字的使用與方法的重載相關(guān)知識
這篇文章主要介紹了Java的this關(guān)鍵字的使用與方法的重載相關(guān)知識,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09

