bootstrap fileinput 的使用感悟
阿新 • • 發佈:2019-02-02
bootstrap fileinput 的填坑感悟
這個外掛在demo的網站地址http://plugins.krajee.com/file-preview-icons-demo;不得不承認這個外掛很強大,作為一個檔案上傳外掛做到了預覽,而且還支援國際化,但是唯一的缺點就是api爛的到極點(應該說沒有API)。
即使沒有API,也不能阻擋我使用的熱情,即時前方再多的坑也被我一一填滿。希望我這篇文章對於初學者有點幫助。廢話不多說,開始填坑之旅。
第一步開始知道需要應用的檔案:
css:<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
<link href="${base}/style/admin/css/fileinput.min.css" rel="stylesheet" />
js: <script type="text/javascript" src="${base}/plugin/umeditor1_2_2/third-party/jquery.min.js"></script>
<script type="text/javascript" src="${base}/style/admin/js/fileinput.min.js"></script>
<script type="text/javascript" src="${base}/style/admin/js/fileinput_locale_zh.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
簡單說明下css檔案需要Bootstrap的css檔案和該外掛的css檔案,js檔案裡匯入fileinput_locale_zh.js,是為了支援中文,如果你的網站是支援國際化的,那還需要匯入各國的js(這些都可以在這個外掛的官方下載到,常見的國家都有),jsp程式碼如下:
匯入後第二步要寫js初始化這個外掛,js程式碼如下:
<link href="${base}/style/admin/css/fileinput.min.css" rel="stylesheet" />
<script type="text/javascript" src="${base}/style/admin/js/fileinput.min.js"></script>
<script type="text/javascript" src="${base}/style/admin/js/fileinput_locale_zh.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<div class="form-group"> <label class="col-sm-2 control-label">圖片上傳:</label> <div class="col-sm-4"> <input id="file" name="myfile" type="file" data-show-caption="true"> <p class="help-block">支援jpg、jpeg、png格式,大小不超過2.0M</p> </div> </div>
匯入後第二步要寫js初始化這個外掛,js程式碼如下:
function initFileInput(ctrlName,uploadUrl) {
var control = $('#' + ctrlName);
control.fileinput({
language: 'zh', //設定語言
uploadUrl: uploadUrl, //上傳地址
showUpload: false, //是否顯示上傳按鈕
showRemove:true,
dropZoneEnabled: false,
showCaption: true,//是否顯示標題
allowedPreviewTypes: ['image'],
allowedFileTypes: ['image'],
allowedFileExtensions: ['jpg', 'png'],
maxFileSize : 2000,
maxFileCount: 1,
//initialPreview: [
//預覽圖片的設定
// "<img src='http://127.0.0.1:8080/NewsManageSys/plugin/umeditor1_2_2/jsp/upload/20161030/55061 477813913474.jpg' class='file-preview-image' alt='肖像圖片' title='肖像圖片'>",
//],
}).on("filebatchselected", function(event, files) {
$(this).fileinput("upload");
})
.on("fileuploaded", function(event, data) {
$("#path").attr("value",data.response);
});
}
$(function () {
var path="${base}/admin/product/upload.htm";
initFileInput("file",path);
})
這是非同步上傳的js程式碼,而且還是選擇圖片自動上傳的,當然你也可以修改這個js改為顯示上傳按鈕,點選上傳按鈕才上傳。因為該外掛的非同步上傳是ajax提交,後臺spring就按照ajax提交獲取它的提交。java程式碼如下:
/**
*
* 方法名: upload
* 方法作用: 檔案非同步上傳
* 建立人:Wu Feng
* 建立時間:2016-11-9 下午10:16:36
* @param @param request
* @param @param product
* @param @return
* 返回值型別: String
* @throws
*/
@ResponseBody
@RequestMapping("/upload")
public String upload(MultipartHttpServletRequest request,Product product) {
//存放地址
String path=productService.upload(request);
return path;
}
將檔案上傳後,返回檔案的路徑,js程式碼: $("#path").attr("value",data.response);將路徑返回,賦值頁面隱藏的路徑欄位。然後點選確定把資料插入進去。
如果是同步提交,需要設定該外掛配置引數uploadAsync,因為該外掛預設是非同步提交,因此把它設為false就行。js程式碼如下:
function initFileInput(ctrlName) {
var control = $('#' + ctrlName);
control.fileinput({
language: 'zh', //設定語言
showUpload: false, //是否顯示上傳按鈕
showRemove:true,
dropZoneEnabled: false,
showCaption: true,//是否顯示標題
allowedPreviewTypes: ['image'],
allowedFileTypes: ['image'],
allowedFileExtensions: ['jpg', 'png'],
maxFileSize : 2000,
maxFileCount: 1,
uploadAsync: false, //同步上傳
//initialPreview: [
//預覽圖片的設定
// "<img src='http://127.0.0.1:8080/NewsManageSys/plugin/umeditor1_2_2/jsp/upload/20161030/55061 477813913474.jpg' class='file-preview-image' alt='肖像圖片' title='肖像圖片'>",
//],
})
}
//初始化就呼叫該方法
$(function () {
initFileInput("file");
})
java後臺的程式碼:
/**
*
* 方法名: save
* 方法作用: 產品儲存
* 建立人:Wu Feng
* 建立時間:2016-11-9 下午07:26:08
* @param @param request
* @param @param news
* @param @return
* 返回值型別: String
* @throws
*/
@RequestMapping("/save")
public String save(MultipartHttpServletRequest request,Product product) {
//存放地址
String path=productService.upload(request);
product.setPath(path);
//存入產品資訊
productService.insert(product);
return "redirect:/admin/product/add.htm";
}
我這裡採用的是同步提交,當用戶選擇檔案後,就只有點選確定提交,而不是點選上傳後,在點選確定提交,這樣省去了一部操作,也是極大的方便。
說到這裡,大家覺得並沒有坑,其實坑很多,比如我碰到了顯示的一直都是英文,不是因為我沒有匯入fileinput_locale_zh.js,網上一查,原來是沒有去掉class=“file”,非常感謝這個網站:點選開啟連結,第二個坑就是我不想要顯示拖拽區域,因為我喜歡簡單點,那樣我覺得太難看了,這時候你需要知道全部的配置資訊,這裡感謝這位csdn好友提供了配置資訊(很給力)。網站地址如下:點選開啟連結
是不是該結束了,並沒有,細心你的會發現,那我們編輯產品資訊的時候,需要看他上傳的產品圖片,這個也簡單,你只要在我註釋的程式碼裡寫上圖片地址就行了。附上我的勞動成品: