dropzone.js 是一个开源的 JavaScript 库,提供 AJAX 异步上传功能。
前提是先引入jq、和dropzone.js,我是基于bootstrap,所以这个也会引入,下面是主要的
<!-- dropzonejs -->
<script src="/static/adminlte/plugins/jquery/jquery.min.js"></script>
<link rel="stylesheet" href="/static/adminlte/plugins/dropzone/min/dropzone.min.css">
<script src="/static/adminlte/plugins/dropzone/min/dropzone.min.js"></script>

html部分:
<div class="form-group"> <div class="row"> <div class="col-md-12"> <div class="card card-default"> <div class="card-header"> <h3 class="card-title">商品轮播图</h3> </div> <div class="card-body"> <div id="actions" class="row"> <div class="col-lg-6"> <div class="btn-group w-100"> <div class="btn btn-success col fileinput-button dz-clickable"> <i class="fas fa-plus"></i> <span>添加图片</span> </div> <div type="submit" class="btn btn-primary col start"> <i class="fas fa-upload"></i> <span>开始上传</span> </div> <div type="reset" class="btn btn-warning col cancel"> <i class="fas fa-times-circle"></i> <span>取消上传</span> </div> </div> </div> <div class="col-lg-6 d-flex align-items-center"> <div class="fileupload-process w-100"> <div id="total-progress" class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0" style="opacity: 0;"> <div class="progress-bar progress-bar-success" style="width: 100%;" data-dz-uploadprogress=""></div> </div> </div> </div> </div> <div class="table table-striped files" id="previews"> <div id="template" class="row mt-2"> <div class="col-auto"> <span class="preview"><img src="data:," alt="" data-dz-thumbnail /></span> </div> <div class="col d-flex align-items-center"> <p class="mb-0"> <span class="lead" data-dz-name></span> (<span data-dz-size></span>) </p> <strong class="error text-danger" data-dz-errormessage></strong> </div> <div class="col-4 d-flex align-items-center"> <div class="progress progress-striped active w-100" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"> <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div> </div> </div> <div class="col-auto d-flex align-items-center"> <div class="btn-group"> <div class="btn btn-primary start"> <i class="fas fa-upload"></i> <span>开始上传</span> </div> <div data-dz-remove class="btn btn-warning cancel"> <i class="fas fa-times-circle"></i> <span>取消</span> </div> <div data-dz-remove class="btn btn-danger delete"> <i class="fas fa-trash"></i> <span>删除</span> </div> </div> </div> </div> </div> </div> </div> <!-- /.card-body --> <div class="card-footer"> 最多支持10张 </div> </div> <!-- /.card --> </div> </div> </div>
js部分:
<script>
//轮播
// DropzoneJS Demo Code Start
Dropzone.autoDiscover = false
// Get the template HTML and remove it from the doumenthe template HTML and remove it from the doument
var previewNode = document.querySelector("#template")
previewNode.id = ""
var previewTemplate = previewNode.parentNode.innerHTML
previewNode.parentNode.removeChild(previewNode)
var myDropzone = new Dropzone(document.body, {
url: "<{:url('/admin/upload/image')}>" ,
method:'post',
params:{ 'fileKey' : 'bs_shop' , 'from' :'bsgoods'},
paramName:'bs_shop',
withCredentials:true,
thumbnailWidth: 80,
thumbnailHeight: 80,
parallelUploads: 20,
previewTemplate: previewTemplate,
autoQueue: false, // Make sure the files aren't queued until manually added
previewsContainer: "#previews", // Define the container to display the previews
clickable: ".fileinput-button" // Define the element that should be used as click trigger to select files.
})
myDropzone.on("addedfile", function(file) {
// Hookup the start button
file.previewElement.querySelector(".start").onclick = function() { myDropzone.enqueueFile(file) }
})
// Update the total progress bar
myDropzone.on("totaluploadprogress", function(progress) {
document.querySelector("#total-progress .progress-bar").style.width = progress + "%"
})
myDropzone.on("sending", function(file) {
// Show the total progress bar when upload starts
document.querySelector("#total-progress").style.opacity = "1"
// And disable the start button
file.previewElement.querySelector(".start").setAttribute("disabled", "disabled")
})
myDropzone.on("removedfile", function(file) {
if (file.status=='success'){
//todo 从服务端删除
console.log('xx',JSON.parse(file.xhr.response))
}
console.log('removedfile',file)
});
myDropzone.on("success", function(file,a) {
console.log('success', {file, a})
})
// Hide the total progress bar when nothing's uploading anymore
myDropzone.on("queuecomplete", function(progress) {
document.querySelector("#total-progress").style.opacity = "0"
})
// Setup the buttons for all transfers
// The "add files" button doesn't need to be setup because the config
// `clickable` has already been specified.
document.querySelector("#actions .start").onclick = function() {
myDropzone.enqueueFiles(myDropzone.getFilesWithStatus(Dropzone.ADDED))
}
document.querySelector("#actions .cancel").onclick = function() {
myDropzone.removeAllFiles(true)
}
// DropzoneJS Demo Code End
</script>