fine-uploader:轻松创建功能强大,优雅且灵活的文件上传组件
使用fine-uploader也很简单,它分为纯JavaScript和jQuery依赖两种
1.下面是使用jquery的html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- jQuery
====================================================================== -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<!-- Fine Uploader New/Modern CSS file
====================================================================== -->
<link href="client/fine-uploader-new.css" rel="stylesheet">
<!-- Fine Uploader jQuery JS file
====================================================================== -->
<script src="client/jquery.fine-uploader.js"></script>
<!-- Fine Uploader Thumbnails template w/ customization
====================================================================== -->
<script type="text/template" id="qq-template-manual-trigger">
<div class="qq-uploader-selector qq-uploader" qq-drop-area-text="Drop files here">
<div class="qq-total-progress-bar-container-selector qq-total-progress-bar-container">
<div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" class="qq-total-progress-bar-selector qq-progress-bar qq-total-progress-bar"></div>
</div>
<div class="qq-upload-drop-area-selector qq-upload-drop-area" qq-hide-dropzone>
<span class="qq-upload-drop-area-text-selector"></span>
</div>
<div class="buttons">
<div class="qq-upload-button-selector qq-upload-button">
<div>Select files</div>
</div>
<button type="button" id="trigger-upload" class="btn btn-primary">
<i class="icon-upload icon-white"></i> Upload
</button>
</div>
<span class="qq-drop-processing-selector qq-drop-processing">
<span>Processing dropped files...</span>
<span class="qq-drop-processing-spinner-selector qq-drop-processing-spinner"></span>
</span>
<ul class="qq-upload-list-selector qq-upload-list" aria-live="polite" aria-relevant="additions removals">
<li>
<div class="qq-progress-bar-container-selector">
<div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" class="qq-progress-bar-selector qq-progress-bar"></div>
</div>
<span class="qq-upload-spinner-selector qq-upload-spinner"></span>
<img class="qq-thumbnail-selector" qq-max-size="100" qq-server-scale>
<span class="qq-upload-file-selector qq-upload-file"></span>
<span class="qq-edit-filename-icon-selector qq-edit-filename-icon" aria-label="Edit filename"></span>
<input class="qq-edit-filename-selector qq-edit-filename" tabindex="0" type="text">
<span class="qq-upload-size-selector qq-upload-size"></span>
<button type="button" class="qq-btn qq-upload-cancel-selector qq-upload-cancel">Cancel</button>
<button type="button" class="qq-btn qq-upload-retry-selector qq-upload-retry">Retry</button>
<button type="button" class="qq-btn qq-upload-delete-selector qq-upload-delete">Delete</button>
<span role="status" class="qq-upload-status-text-selector qq-upload-status-text"></span>
</li>
</ul>
<dialog class="qq-alert-dialog-selector">
<div class="qq-dialog-message-selector"></div>
<div class="qq-dialog-buttons">
<button type="button" class="qq-cancel-button-selector">Close</button>
</div>
</dialog>
<dialog class="qq-confirm-dialog-selector">
<div class="qq-dialog-message-selector"></div>
<div class="qq-dialog-buttons">
<button type="button" class="qq-cancel-button-selector">No</button>
<button type="button" class="qq-ok-button-selector">Yes</button>
</div>
</dialog>
<dialog class="qq-prompt-dialog-selector">
<div class="qq-dialog-message-selector"></div>
<input type="text">
<div class="qq-dialog-buttons">
<button type="button" class="qq-cancel-button-selector">Cancel</button>
<button type="button" class="qq-ok-button-selector">Ok</button>
</div>
</dialog>
</div>
</script>
<style>
#trigger-upload {
color: white;
background-color: #00ABC7;
font-size: 14px;
padding: 7px 20px;
background-image: none;
}
#fine-uploader-manual-trigger .qq-upload-button {
margin-right: 15px;
}
#fine-uploader-manual-trigger .buttons {
width: 36%;
}
#fine-uploader-manual-trigger .qq-uploader .qq-total-progress-bar-container {
width: 60%;
}
</style>
<title>Fine Uploader Manual Upload Trigger Demo</title>
</head>
<body>
<!-- Fine Uploader DOM Element
====================================================================== -->
<div id="fine-uploader-manual-trigger"></div>
<!-- Your code to create an instance of Fine Uploader and bind to the DOM/template
====================================================================== -->
<script>
var uploader = new qq.FineUploader({
template: 'qq-template-manual-trigger',
debug: false,
thumbnails: {
placeholders: {
waitingPath: 'client/placeholders/waiting-generic.png',
notAvailablePath: 'client/placeholders/not_available-generic.png'
}
},
element: document.getElementById('fine-uploader-manual-trigger'),
request: {
endpoint: 'uploads',
params:{},
paramsInBody:false
},
deleteFile: {
enabled: true,
endpoint: '',
method:"DELETE",
params:{}
},
autoUpload: false,
retry: {
enableAuto: true,
autoAttemptDelay:5,
maxAutoAttempts:3
},
button:{
},
disableCancelForFormUploads:false,
formatFileName:function(filename){
},
maxConnections:3,
multiple:true,
warnBeforeUnload:true,
blobs:{
defaultName:filename
},
camera:{
button:htmlbutton,
iso:false
},
chunking:{
concurrent:{
enabled:false
},
enabled:false,
partSize:2000000,
paramNames:{
chunkSize:chunkSize,
partByteOffset:partByteOffset,
partIndex:partIndex,
totalParts:totalParts
},
success:{
endpoint:endpoint,
headers:function(fileId) { return null },
jsonPayload:false,
method:"POST",
params:function(fileId) { return null },
resetOnStatus:status
}
},
cors:{
allowXdr:false,
expected:false,
sendCredentials:false
},
extraButtons:{
folders:false
},
form:{
element:element,
autoUpload:false
},
messages:{
emptyError:"{file} is empty, please select files again without it.",
sizeError:"{file} is too large, maximum file size is {sizeLimit}.",
tooManyItemsError:"Too many items ({netItems}) would be uploaded. Item limit is {itemLimit}.",
typeError:"{file} has an invalid extension. Valid extension(s): {extensions}."
},
paste:{
defaultName:defaultName
},
resume:{
customKeys:function(fileId) { return [] },
enabled:false,
paramNames:{
resuming:"qqresume"
},
recordsExpireIn:7
},
scaling:{
},
session:{
},
text:{
},
validation:{
acceptFiles:"",//以逗号分隔的有效MIME类型列表
allowedExtensions:['jpeg', 'jpg', 'gif', 'png'],//在此处指定文件有效文件扩展名以限制上传到特定类型。
allowEmpty:false,//允许文件大小为0字节
itemLimit:0,//可以在此会话中上载的最大项目数。在达到此限制后,将拒绝添加或重试的所有项目
minSizeLimit:0,//项目的最小允许大小(以字节为单位)。
image:{
maxHeight:0,
maxWidth:0,
minHeight:0,
minWidth:0
}
},
workarounds:{
},
callbacks:{
onSubmit: function(id, fileName) {
console.log(fileName);
},
onUpload:function (id, fileName) {
uploader.cancelAll();
},
onAutoRetry: function(id, fileName,retryNum) {
console.log(fileName);
},
onCancel: function(id, fileName) {
console.log(fileName);
},
onComplete: function(id, fileName,responseJSON) {
console.log(fileName);
},
onAllComplete: function(ids ) {
console.log(ids);
},
onDelete: function(id) {
console.log(id);
},
onDeleteComplete: function(id, xhr,isError) {
console.log(isError);
},
onError: function(id, fileName,errorReason,xhr) {
console.log(errorReason);
},
onManualRetry: function(id, fileName) {
console.log(fileName);
},
onPasteReceived: function(blob) {
console.log(blob);
},
onProgress: function(id, fileName,uploadedBytes,totalBytes) {
console.log(totalBytes);
}
}
});
</script>
</body>
</html>