Bootstrap FileInput實(shí)現(xiàn)圖片上傳功能
本文實(shí)例為大家分享了Bootstrap FileInput實(shí)現(xiàn)圖片上傳功能的具體代碼,供大家參考,具體內(nèi)容如下
html代碼:
<div class="form-group">
<label class="col-sm-2 control-label">圖片</label>
<div class="col-sm-8">
<input id="filesInput" type="file" multiple data-browse-on-zone-click="true" class="file-loading" accept="image/*" />
<input id="resources" name="resources" th:value="${record.picUrls}" type="hidden">//獲取上傳的圖片路徑,$("#filesInput").val()獲取不到,用隱藏的input來獲取
</div>
</div>
引入js和css文件
<link href="/ajax/libs/bootstrap-fileinput/fileinput.css" rel="stylesheet" type="text/css"/>
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-fileinput/fileinput.js}"></script>
js代碼:
var List = new Array();//定義一個(gè)全局變量去接受文件名和id
$(function () {
var picStr = [
http:...,
http:....
];
var picStrConfig = [
{caption: "11111", width: "120px", fileid:"123456", url: "deleteData", type:"image", key: "1"},
........
];
$('#filesInput').fileinput({
theme: 'fas',
language: 'zh',
uploadUrl: ctx + 'bike/record/uploadData',
uploadAsync: true, //默認(rèn)異步上傳
showUpload: true, //是否顯示上傳按鈕
overwriteInitial: false,
showRemove : false, //顯示移除按鈕
// showPreview : true, //是否顯示預(yù)覽
showCaption: false,//是否顯示標(biāo)題
browseClass: "btn btn-primary", //按鈕樣式
dropZoneEnabled: false,//是否顯示拖拽區(qū)域
maxFileCount: 5, //表示允許同時(shí)上傳的最大文件個(gè)數(shù)
enctype: 'multipart/form-data',
validateInitialCount:true,
layoutTemplates: {actionUpload: ''},
maxFilesNum: 5,
fileType: "any",
allowedPreviewTypes: ['image'],
previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
initialPreviewAsData: true,
initialPreview: picStr, //初始化回顯圖片路徑
initialPreviewConfig: picStrConfig //配置預(yù)覽中的一些參數(shù)
}).on("fileuploaded", function (event, data, previewId, index) {
var response = data.response;
var filePath = data.response.filePath; //文件上傳成功返回的文件名,可返回自定義文件名
List.push({ FileName: filePath, KeyID: previewId })
// alert(response.filePath);
// $("#fileMd5").val(response.fileMd5);
// $("#version").val(response.newVersionName);
var resources = $('#resources').val();
if (!resources){
$("#resources").val(response.filePath);
}else{
$("#resources").val(resources+"^_^"+response.filePath);
}
}).on('filepredelete', function(event, data, previewId, index) { //刪除原圖片之前的觸發(fā)動(dòng)作
}).on('filedeleted',function (event, data, previewId, index) {//刪除原圖片之后的動(dòng)作
var resources = $("#resources").val();
var respone = previewId.responseJSON;
if(respone.code == 0){
var deleteName = "/"+data;
if(resources.indexOf("^_^"+deleteName)>-1){
$("#resources").val("^_^"+resources.replace(deleteName,""));
resources = $("#resources").val();
}
if(resources.indexOf(deleteName+"^_^")>-1){
$("#resources").val(resources.replace(deleteName+"^_^",""));
resources = $("#resources").val();
}
if(resources.indexOf(deleteName)>-1){
$("#resources").val(resources.replace(deleteName,""));
resources = $("#resources").val();
}
}
}).on('filepreupload', function(event, data, previewId, index) {
var form = data.form, files = data.files, extra = data.extra,
response = data.response, reader = data.reader;
}).on("filesuccessremove", function (event, data, previewId, index) {
var resources = $("#resources").val();
for (var i = 0; i < List.length; i++) {
if (List[i].KeyID == data) {
if(resources.indexOf("^_^"+List[i].FileName)>-1){
$("#resources").val("^_^"+resources.replace(List[i].FileName,""));
resources = $("#resources").val();
}
if(resources.indexOf(List[i].FileName+"^_^")>-1){
$("#resources").val(resources.replace(List[i].FileName+"^_^",""));
resources = $("#resources").val();
}
if(resources.indexOf(List[i].FileName)>-1){
$("#resources").val(resources.replace(List[i].FileName,""));
resources = $("#resources").val();
}
List[i].KeyID = "1"
}
}
});
})
java代碼:
/**
* 上傳文件
*/
@RequestMapping("/uploadData")
@ResponseBody
public Map<String, Object> uploadData(HttpServletRequest request, HttpServletResponse response) throws Exception{
request.setCharacterEncoding("UTF-8");
Map<String, Object> json = new HashMap<String, Object>();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
/** 頁面控件的文件流* */
MultipartFile multipartFile = null;
Map map =multipartRequest.getFileMap();
for (Iterator i = map.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
multipartFile=(MultipartFile) map.get(obj);
}
/** 獲取文件的后綴* */
String filename = multipartFile.getOriginalFilename();
InputStream inputStream;
String path = "";
String fileMd5 = "";
try {
/** 文件上傳到存儲(chǔ)庫中 **/
inputStream = multipartFile.getInputStream();
File tmpFile = File.createTempFile(filename,
filename.substring(filename.lastIndexOf(".")));
fileMd5 = Files.hash(tmpFile, Hashing.md5()).toString();
FileUtils.copyInputStreamToFile(inputStream, tmpFile);
/** 上傳到 MinIO上 **/
path = minioFileUtil.uploadCustomize(multipartFile.getInputStream(), filename.substring(filename.lastIndexOf(".")), "",multipartFile.getContentType());
/** 上傳 到 阿里云oss **/
// path = AliOSSUtils.getInstance().multpartFileUpload(multipartFile,"bike");
tmpFile.delete();
} catch (Exception e) {
e.printStackTrace();
logger.error("上傳失敗",e);
json.put("fileMd5", fileMd5);
json.put("message", "上傳失敗");
json.put("status", false);
json.put("filePath", path);
return json;
}
json.put("fileMd5", fileMd5);
json.put("message", "上傳成功");
json.put("status", true);
json.put("filePath", path);
json.put("key", UUIDGenerator.getUUID());
return json;
}
/**
* 刪除文件文件
*/
@RequestMapping("/edit/deleteData/{id}")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public AjaxResult deleteData(@PathVariable("id")String id, HttpServletRequest request) throws Exception{
String key = request.getParameter("key");
Record record = recordService.getById(id);
String picUrls = record.getPicUrls();
String deleteName = "/" + key;
if (picUrls.indexOf("^_^" + deleteName) > -1) {
picUrls = "^_^" + picUrls.replace(deleteName, "");
}
if (picUrls.indexOf(deleteName + "^_^") > -1) {
picUrls = picUrls.replace(deleteName + "^_^", "");
}
if (picUrls.indexOf(deleteName) > -1) {
picUrls = picUrls.replace(deleteName, "");
}
record.setPicUrls(picUrls);
if (recordMapper.updatePicsById(record) == 1) { /** 先刪除數(shù)據(jù)庫中的圖片路徑 再刪除圖片存儲(chǔ)的源文件。**/
minioUtil.removeObject(bucketName, key);
return success(key);
}
return error();
}
修改 fileInput 源碼:
self._handler($el, 'click', function () {
if (!self._validateMinCount()) {
return false;
}
self.ajaxAborted = false;
self._raise('filebeforedelete', [vKey, extraData]);
//noinspection JSUnresolvedVariable,JSHint
$.modal.confirm("確定刪除原文件?刪除后不可恢復(fù)",function () { //初始化回顯的圖片在刪除時(shí)彈出提示框確認(rèn)。
if (self.ajaxAborted instanceof Promise) {
self.ajaxAborted.then(function (result) {
if (!result) {
$.ajax(settings);
}
});
} else {
if (!self.ajaxAborted) {
$.ajax(settings);
}
}
})
});
});
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Bootstrap Fileinput文件上傳組件用法詳解
- JS文件上傳神器bootstrap fileinput詳解
- Bootstrap fileinput文件上傳預(yù)覽插件使用詳解
- Bootstrap中的fileinput 多圖片上傳及編輯功能
- Bootstrap的fileinput插件實(shí)現(xiàn)多文件上傳的方法
- bootstrapfileinput實(shí)現(xiàn)文件自動(dòng)上傳
- 基于bootstrap的上傳插件fileinput實(shí)現(xiàn)ajax異步上傳功能(支持多文件上傳預(yù)覽拖拽)
- 詳解bootstrap-fileinput文件上傳控件的親身實(shí)踐
- Bootstrap fileinput 上傳新文件移除時(shí)觸發(fā)服務(wù)器同步刪除的配置
- BootStrap fileinput.js文件上傳組件實(shí)例代碼
相關(guān)文章
javascript簡(jiǎn)單拖拽實(shí)現(xiàn)代碼(鼠標(biāo)事件 mousedown mousemove mouseup)
javascript簡(jiǎn)單拖拽,簡(jiǎn)單拖拽實(shí)現(xiàn)2012-05-05
基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條
這篇文章主要介紹了基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
JS啟動(dòng)應(yīng)用程序的一個(gè)簡(jiǎn)單例子
用jscript實(shí)現(xiàn)啟動(dòng)程序一個(gè)例子2008-05-05
JavaScript常用工具函數(shù)匯總(瀏覽器環(huán)境)
這篇文章主要匯總了JavaScript常用的工具函數(shù),幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下2020-09-09
javascript 動(dòng)態(tài)數(shù)據(jù)下的錨點(diǎn)錯(cuò)位問題解決方法
用 Javascript 實(shí)現(xiàn)錨點(diǎn)(Anchor)間平滑跳轉(zhuǎn)2008-12-12
微信內(nèi)置瀏覽器私有接口WeixinJSBridge介紹
這篇文章主要介紹了微信內(nèi)置瀏覽器私有接口WeixinJSBridge介紹,本文講解了發(fā)送給好友、分享函數(shù)、隱藏工具欄、隱藏三個(gè)點(diǎn)按鈕等功能,需要的朋友可以參考下2015-05-05
js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效
這篇文章主要為大家詳細(xì)介紹了js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09

