|
|
@@ -1,81 +1,74 @@ |
|
|
|
<!doctype html> |
|
|
|
<html lang="en"> |
|
|
|
<head> |
|
|
|
<meta charset="UTF-8"> |
|
|
|
<meta name="viewport" |
|
|
|
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> |
|
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
|
|
|
<title>spring-boot-demo-upload</title> |
|
|
|
<link href="webuploader-0.1.5/webuploader.css" rel="stylesheet"> |
|
|
|
<script src="jquery/jquery-3.3.1.min.js"></script> |
|
|
|
<script src="webuploader-0.1.5/webuploader.js"></script> |
|
|
|
<meta charset="UTF-8"> |
|
|
|
<meta name="viewport" |
|
|
|
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> |
|
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge"> |
|
|
|
<title>spring-boot-demo-upload</title> |
|
|
|
<!-- import Vue.js --> |
|
|
|
<script src="//vuejs.org/js/vue.min.js"></script> |
|
|
|
<!-- import stylesheet --> |
|
|
|
<link rel="stylesheet" href="//unpkg.com/iview/dist/styles/iview.css"> |
|
|
|
<!-- import iView --> |
|
|
|
<script src="//unpkg.com/iview/dist/iview.min.js"></script> |
|
|
|
</head> |
|
|
|
<body> |
|
|
|
<div id="uploader" class="wu-example"> |
|
|
|
<!--用来存放文件信息--> |
|
|
|
<div id="thelist" class="uploader-list"></div> |
|
|
|
<div class="btns"> |
|
|
|
<div id="picker">选择文件</div> |
|
|
|
<button id="ctlBtn" class="btn btn-default">开始上传</button> |
|
|
|
</div> |
|
|
|
<div id="app"> |
|
|
|
<Upload |
|
|
|
:before-upload="handleLocalUpload" |
|
|
|
action="//jsonplaceholder.typicode.com/posts/" |
|
|
|
ref="localUpload" |
|
|
|
:on-success="handleLocalSuccess" |
|
|
|
:on-error="handleLocalError" |
|
|
|
> |
|
|
|
<i-button icon="ios-cloud-upload-outline">选择文件</i-button> |
|
|
|
</Upload> |
|
|
|
<i-button |
|
|
|
type="primary" |
|
|
|
@click="localUpload" |
|
|
|
:loading="localUpload.loadingStatus" |
|
|
|
:disabled="!localUpload.file"> |
|
|
|
{{ localUpload.loadingStatus ? '上传中' : '上传' }} |
|
|
|
</i-button> |
|
|
|
</div> |
|
|
|
<script> |
|
|
|
var uploader = WebUploader.create({ |
|
|
|
|
|
|
|
// swf文件路径 |
|
|
|
swf: 'webuploader-0.1.5/Uploader.swf', |
|
|
|
|
|
|
|
// 文件接收服务端。 |
|
|
|
server: 'http://webuploader.duapp.com/server/fileupload.php', |
|
|
|
|
|
|
|
// 选择文件的按钮。可选。 |
|
|
|
// 内部根据当前运行是创建,可能是input元素,也可能是flash. |
|
|
|
pick: '#picker', |
|
|
|
|
|
|
|
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! |
|
|
|
resize: false |
|
|
|
}); |
|
|
|
|
|
|
|
// 当有文件被添加进队列的时候 |
|
|
|
var $list = $("#thelist"); |
|
|
|
uploader.on('fileQueued', function (file) { |
|
|
|
$list.append('<div id="' + file.id + '" class="item">' + |
|
|
|
'<h4 class="info">' + file.name + '</h4>' + |
|
|
|
'<p class="state">等待上传...</p>' + |
|
|
|
'</div>'); |
|
|
|
}); |
|
|
|
|
|
|
|
// 文件上传过程中创建进度条实时显示。 |
|
|
|
uploader.on( 'uploadProgress', function( file, percentage ) { |
|
|
|
var $li = $( '#'+file.id ), |
|
|
|
$percent = $li.find('.progress .progress-bar'); |
|
|
|
|
|
|
|
// 避免重复创建 |
|
|
|
if ( !$percent.length ) { |
|
|
|
$percent = $('<div class="progress progress-striped active">' + |
|
|
|
'<div class="progress-bar" role="progressbar" style="width: 0%">' + |
|
|
|
'</div>' + |
|
|
|
'</div>').appendTo( $li ).find('.progress-bar'); |
|
|
|
} |
|
|
|
|
|
|
|
$li.find('p.state').text('上传中'); |
|
|
|
|
|
|
|
$percent.css( 'width', percentage * 100 + '%' ); |
|
|
|
}); |
|
|
|
|
|
|
|
uploader.on( 'uploadSuccess', function( file ) { |
|
|
|
$( '#'+file.id ).find('p.state').text('已上传'); |
|
|
|
}); |
|
|
|
|
|
|
|
uploader.on( 'uploadError', function( file ) { |
|
|
|
$( '#'+file.id ).find('p.state').text('上传出错'); |
|
|
|
}); |
|
|
|
|
|
|
|
uploader.on( 'uploadComplete', function( file ) { |
|
|
|
$( '#'+file.id ).find('.progress').fadeOut(); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
new Vue({ |
|
|
|
el: '#app', |
|
|
|
data: { |
|
|
|
localUpload: { |
|
|
|
// 选择文件后,将 beforeUpload 返回的 file 保存在这里,后面会用到 |
|
|
|
file: null, |
|
|
|
// 标记上传状态 |
|
|
|
loadingStatus: false |
|
|
|
}, |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
// beforeUpload 在返回 false 或 Promise 时,会停止自动上传,这里我们将选择好的文件 file 保存在 data里,并 return false |
|
|
|
handleLocalUpload(file) { |
|
|
|
this.localUpload.file = file; |
|
|
|
return false; |
|
|
|
}, |
|
|
|
// 这里是手动上传,通过 $refs 获取到 Upload 实例,然后调用私有方法 .post(),把保存在 data 里的 file 上传。 |
|
|
|
// iView 的 Upload 组件在调用 .post() 方法时,就会继续上传了。 |
|
|
|
localUpload() { |
|
|
|
this.localUpload.loadingStatus = true; // 标记上传状态 |
|
|
|
this.$refs.localUpload.post(this.localUpload.file); |
|
|
|
}, |
|
|
|
// 上传成功后,清空 data 里的 file,并修改上传状态 |
|
|
|
handleLocalSuccess() { |
|
|
|
this.localUpload.file = null; |
|
|
|
this.localUpload.loadingStatus = false; |
|
|
|
this.$Message.success('上传成功'); |
|
|
|
}, |
|
|
|
// 上传失败后,清空 data 里的 file,并修改上传状态 |
|
|
|
handleLocalError() { |
|
|
|
this.localUpload.file = null; |
|
|
|
this.localUpload.loadingStatus = false; |
|
|
|
this.$Message.error('上传失败'); |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
</script> |
|
|
|
</body> |
|
|
|
</html> |