webUploader 的使用
地址:http://fex.baidu.com/webuploader/demo.html
这个主要是扒的demo
引用<link href="~/Scripts/webuploader/webuploader.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="~/Scripts/webuploader/webuploader.js"></script>
示例:
html 页面代码
<div id="uploader" class="wu-example">
<div class="queueList">
<div id="dndArea" class="placeholder">
<div id="filePicker" class="webuploader-container"><div class="webuploader-pick">点击选择图片</div><div id="rt_rt_1bgaoa8gj1agt136q15n7a011piv1" style="position: absolute; top: 0px; left: 448px; width: 168px; height: 44px; overflow: hidden; bottom: auto; right: auto;"><input type="file" name="file" class="webuploader-element-invisible" multiple="multiple" accept="image/*"><label style="opacity: 0; width: 100%; height: 100%; display: block; cursor: pointer; background: rgb(255, 255, 255);"></label></div></div>
<p>或将照片拖到这里,单次最多可选10张</p>
</div>
<ul class="filelist"></ul>
</div>
<div class="statusBar" style="display:none;">
<div class="progress" style="display: none;">
<span class="text">0%</span>
<span class="percentage" style="width: 0%;"></span>
</div><div class="info">共0张(0B),已上传0张</div>
<div class="btns">
<div id="filePicker2" class="webuploader-container"><div class="webuploader-pick">继续添加</div><div id="rt_rt_1bgaoa8gp1spq1ea91li71tf816oh6" style="position: absolute; top: 0px; left: 0px; width: 1px; height: 1px; overflow: hidden;"><input type="file" name="file" class="webuploader-element-invisible" multiple="multiple" accept="image/*"><label style="opacity: 0; width: 100%; height: 100%; display: block; cursor: pointer; background: rgb(255, 255, 255);"></label></div></div><div class="uploadBtn state-pedding">开始上传</div>
</div>
</div>
</div>
js代码
// 添加全局站点信息
var BASE_URL = '~/Scripts/webuploader';
jQuery(function () {
var $ = jQuery, // just in case. Make sure it's not an other libaray. $wrap = $('#uploader'), // 图片容器
$queue = $('<ul class="filelist"></ul>')
.appendTo($wrap.find('.queueList')), // 状态栏,包括进度和控制按钮
$statusBar = $wrap.find('.statusBar'), // 文件总体选择信息。
$info = $statusBar.find('.info'),
// 文件放大查看信息。
// $BigImg = $statusBar.find('.bigimgview'),
// 文件放大查看信息。
// $DeleteImg = $statusBar.find('.deleteimg'),
// 上传按钮
$upload = $wrap.find('.uploadBtn'), // 没选择文件之前的内容。
$placeHolder = $wrap.find('.placeholder'), // 总体进度条
$progress = $statusBar.find('.progress').hide(), // 添加的文件数量
fileCount = 0, // 添加的文件总大小
fileSize = 0, // 优化retina, 在retina下这个值是2
ratio = window.devicePixelRatio || 1, // 缩略图大小
thumbnailWidth = 110 * ratio,
thumbnailHeight = 110 * ratio, // 可能有pedding, ready, uploading, confirm, done.
state = 'pedding', // 所有文件的进度信息,key为file id
percentages = {}, supportTransition = (function () {
var s = document.createElement('p').style,
r = 'transition' in s ||
'WebkitTransition' in s ||
'MozTransition' in s ||
'msTransition' in s ||
'OTransition' in s;
s = null;
return r;
})(), // WebUploader实例
uploader; if (!WebUploader.Uploader.support()) {
alert('Web Uploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器');
throw new Error('WebUploader does not support the browser you are using.');
} // 实例化
uploader = WebUploader.create({
pick: {
id: '#filePicker',
label: '点击选择图片'
},
dnd: '#uploader .queueList',
paste: document.body, accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/*'
}, // swf文件路径
swf: BASE_URL + '/js/Uploader.swf', disableGlobalDnd: true, chunked: true, server: '/image/UpImage',
deleteServer: '/image/DelImage',
fileNumLimit: 10,
fileSizeLimit: 20 * 1024 * 1024, // 200 M
fileSingleSizeLimit: 2 * 1024 * 1024 // 50 M
}); // 添加“添加文件”的按钮,
uploader.addButton({
id: '#filePicker2',
label: '继续添加'
}); // 当有文件添加进来时执行,负责view的创建
function addFile(file) {
var $li = $('<li id="' + file.id + '">' +
'<p class="title">' + file.name + '</p>' +
'<p class="imgWrap"></p>' +
'<p class="progress"><span></span></p>' +
'</li>'), $btns = $('<div class="file-panel">' +
'<span class="cancel">删除</span>' +
'<span class="rotateRight">向右旋转</span>' +
'<span class="rotateLeft">向左旋转</span></div>').appendTo($li),
$prgress = $li.find('p.progress span'),
$wrap = $li.find('p.imgWrap'),
$info = $('<p class="error"></p>'), showError = function (code) {
switch (code) {
case 'exceed_size':
text = '文件大小超出';
break; case 'interrupt':
text = '上传暂停';
break; default:
text = '上传失败,请重试';
break;
} $info.text(text).appendTo($li);
}; if (file.getStatus() === 'invalid') {
showError(file.statusText);
} else {
// todo lazyload
$wrap.text('预览中');
uploader.makeThumb(file, function (error, src) {
if (error) {
$wrap.text('不能预览');
return;
} var img = $('<img src="' + src + '">');
$wrap.empty().append(img);
}, thumbnailWidth, thumbnailHeight); percentages[file.id] = [file.size, 0];
file.rotation = 0;
} file.on('statuschange', function (cur, prev) {
if (prev === 'progress') {
$prgress.hide().width(0);
} else if (prev === 'queued') {
$li.off('mouseenter mouseleave');
$btns.remove();
} // 成功
if (cur === 'error' || cur === 'invalid') {
console.log(file.statusText);
showError(file.statusText);
percentages[file.id][1] = 1;
} else if (cur === 'interrupt') {
showError('interrupt');
} else if (cur === 'queued') {
percentages[file.id][1] = 0;
} else if (cur === 'progress') {
$info.remove();
$prgress.css('display', 'block');
} else if (cur === 'complete') {
$li.append('<span class="success"></span>');
} $li.removeClass('state-' + prev).addClass('state-' + cur);
}); $li.on('mouseenter', function () {
$btns.stop().animate({ height: 30 });
}); $li.on('mouseleave', function () {
$btns.stop().animate({ height: 0 });
}); $btns.on('click', 'span', function () {
var index = $(this).index(),
deg; switch (index) {
case 0:
uploader.removeFile(file);
return; case 1:
file.rotation += 90;
break; case 2:
file.rotation -= 90;
break;
} if (supportTransition) {
deg = 'rotate(' + file.rotation + 'deg)';
$wrap.css({
'-webkit-transform': deg,
'-mos-transform': deg,
'-o-transform': deg,
'transform': deg
});
} else {
$wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
// use jquery animate to rotation
// $({
// rotation: rotation
// }).animate({
// rotation: file.rotation
// }, {
// easing: 'linear',
// step: function( now ) {
// now = now * Math.PI / 180; // var cos = Math.cos( now ),
// sin = Math.sin( now ); // $wrap.css( 'filter', "progid:DXImageTransform.Microsoft.Matrix(M11=" + cos + ",M12=" + (-sin) + ",M21=" + sin + ",M22=" + cos + ",SizingMethod='auto expand')");
// }
// });
} }); $li.appendTo($queue);
} // 负责view的销毁
function removeFile(file) {
var $li = $('#' + file.id); delete percentages[file.id];
updateTotalProgress();
$li.off().find('.file-panel').off().end().remove();
} function updateTotalProgress() {
var loaded = 0,
total = 0,
spans = $progress.children(),
percent; $.each(percentages, function (k, v) {
total += v[0];
loaded += v[0] * v[1];
}); percent = total ? loaded / total : 0; spans.eq(0).text(Math.round(percent * 100) + '%');
spans.eq(1).css('width', Math.round(percent * 100) + '%');
updateStatus();
} function updateStatus() {
var text = '', stats; if (state === 'ready') {
text = '选中' + fileCount + '张图片,共' +
WebUploader.formatSize(fileSize) + '。';
} else if (state === 'confirm') {
stats = uploader.getStats();
if (stats.uploadFailNum) {
text = '已成功上传' + stats.successNum + '张照片至XX相册,' +
stats.uploadFailNum + '张照片上传失败,<a class="retry" href="#">重新上传</a>失败图片或<a class="ignore" href="#">忽略</a>'
} } else {
stats = uploader.getStats();
text = '共' + fileCount + '张(' +
WebUploader.formatSize(fileSize) +
'),已上传' + stats.successNum + '张'; if (stats.uploadFailNum) {
text += ',失败' + stats.uploadFailNum + '张';
}
} $info.html(text);
} function setState(val) {
var file, stats; if (val === state) {
return;
} $upload.removeClass('state-' + state);
$upload.addClass('state-' + val);
state = val; switch (state) {
case 'pedding':
$placeHolder.removeClass('element-invisible');
$queue.parent().removeClass('filled');
$queue.hide();
$statusBar.addClass('element-invisible');
uploader.refresh();
break; case 'ready':
$placeHolder.addClass('element-invisible');
$('#filePicker2').removeClass('element-invisible');
$queue.parent().addClass('filled');
$queue.show();
$statusBar.removeClass('element-invisible');
uploader.refresh();
break; case 'uploading':
$('#filePicker2').addClass('element-invisible');
$progress.show();
$upload.text('暂停上传');
break; case 'paused':
$progress.show();
$upload.text('继续上传');
break; case 'confirm':
$progress.hide();
$upload.text('开始上传').addClass('disabled'); stats = uploader.getStats();
if (stats.successNum && !stats.uploadFailNum) {
setState('finish');
return;
}
break;
case 'finish':
stats = uploader.getStats();
// alert(stats);
console.log("状态",stats)
if (stats.successNum) {
// alert('上传成功');
} else {
// 没有成功的图片,重设
state = 'done';
location.reload();
}
break;
} updateStatus();
} uploader.onUploadProgress = function (file, percentage) {
var $li = $('#' + file.id),
$percent = $li.find('.progress span'); $percent.css('width', percentage * 100 + '%');
percentages[file.id][1] = percentage;
updateTotalProgress();
}; uploader.onFileQueued = function (file) {
fileCount++;
fileSize += file.size; if (fileCount === 1) {
$placeHolder.addClass('element-invisible');
$statusBar.show();
} addFile(file);
setState('ready');
updateTotalProgress();
}; uploader.onFileDequeued = function (file) {
fileCount--;
fileSize -= file.size; if (!fileCount) {
setState('pedding');
} removeFile(file);
updateTotalProgress(); }; uploader.on('all', function (type) {
var stats;
switch (type) {
case 'uploadFinished':
setState('confirm');
break; case 'startUpload':
setState('uploading');
break; case 'stopUpload':
setState('paused');
break; }
}); uploader.onError = function (code) {
alert('Eroor: ' + code);
}; $upload.on('click', function () {
if ($(this).hasClass('disabled')) {
return false;
}
console.log("上传...");
if (state === 'ready') {
uploader.upload();
console.log("上传成功");
} else if (state === 'paused') {
uploader.upload();
console.log("上传继续");
} else if (state === 'uploading') {
uploader.stop();
console.log("上传停止");
}
}); $info.on('click', '.retry', function () {
uploader.retry();
}); $info.on('click', '.ignore', function () {
alert('todo');
}); $upload.addClass('state-' + state);
updateTotalProgress(); // 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader.on('uploadSuccess', function( file,data ) {
// var uploaderId = '#rt_' + file.source.ruid;
// console.log(uploaderId);
console.log(file.id);
console.log(data);
var $btns = null;
if(data.Code==1)
{
$( '#'+file.id ).addClass('upload-state-done'); $('#'+file.id).find("img").parent().append('<a href="'+ data.savePath +'" target="_blank"></a>')
$('#'+file.id).find(".imgWrap").find("a").append($('#'+file.id).find(".imgWrap").find("img")); $btns = $('<div class="file-panel">' +
'<span class="cancel">删除</span>' +
'</div>'); $btns.on('click', 'span', function () {
var index = $(this).index(),
deg; switch (index) {
case 0:
$.post("/image/DelImage",{"savefile":data.savePath},function(rlt){
if(rlt)
{
uploader.removeFile(file);
}else
{
console.log("删除失败");
}
})
return;
} }); $( '#'+file.id ).append($btns); $( '#'+file.id ).on('mouseenter', function () {
$btns.stop().animate({ height: 30 });
}); $( '#'+file.id ).on('mouseleave', function () {
$btns.stop().animate({ height: 0 });
}); }
else if(data.Code==-1)
{
var $li = $( '#'+file.id ),
$error = $li.find('div.error'); // 避免重复创建
if ( !$error.length ) {
$error = $('<div class="error"></div>').appendTo( $li );
}
$error.text('上传失败');
} }); // 文件上传失败,显示上传出错。
uploader.on( 'uploadError', function( file ) {
var $li = $( '#'+file.id ),
$error = $li.find('div.error'); // 避免重复创建
if ( !$error.length ) {
$error = $('<div class="error"></div>').appendTo( $li );
}
$error.text('上传失败');
}); // 完成上传完了,成功或者失败,先删除进度条。
uploader.on( 'uploadComplete', function( file ) {
$( '#'+file.id ).find('.progress').remove();
});
});
css
#container {
color: #838383;
font-size: 12px;
} #uploader .queueList {
margin: 20px;
border: 3px dashed #e6e6e6;
}
#uploader .queueList.filled {
padding: 17px;
margin:;
border: 3px dashed transparent;
}
#uploader .queueList.webuploader-dnd-over {
border: 3px dashed #999999;
} #uploader p {margin:;} .element-invisible {
position: absolute !important;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px,1px,1px,1px);
} #uploader .placeholder {
min-height: 150px;
padding-top: 178px;
text-align: center;
background: url(../images/image.png) center 93px no-repeat;
color: #cccccc;
font-size: 18px;
position: relative;
} #uploader .placeholder .webuploader-pick {
font-size: 18px;
background: #00b7ee;
border-radius: 3px;
line-height: 44px;
padding: 0 30px;
*width: 120px;
color: #fff;
display: inline-block;
margin: 0 auto 20px auto;
cursor: pointer;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
} #uploader .placeholder .webuploader-pick-hover {
background: #00a2d4;
} #uploader .placeholder .flashTip {
color: #666666;
font-size: 12px;
position: absolute;
width: 100%;
text-align: center;
bottom: 20px;
}
#uploader .placeholder .flashTip a {
color: #0785d1;
text-decoration: none;
}
#uploader .placeholder .flashTip a:hover {
text-decoration: underline;
} #uploader .filelist {
list-style: none;
margin:;
padding:;
} #uploader .filelist:after {
content: '';
display: block;
width:;
height:;
overflow: hidden;
clear: both;
} #uploader .filelist li {
width: 110px;
height: 110px;
background: url(../images/bg.png) no-repeat;
text-align: center;
margin: 0 8px 20px 0;
position: relative;
display: inline;
float: left;
overflow: hidden;
font-size: 12px;
} #uploader .filelist li p.log {
position: relative;
top: -45px;
} #uploader .filelist li p.title {
position: absolute;
top:;
left:;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow : ellipsis;
top: 5px;
text-indent: 5px;
text-align: left;
} #uploader .filelist li p.progress {
position: absolute;
width: 100%;
bottom:;
left:;
height: 8px;
overflow: hidden;
z-index:;
margin:;
border-radius:;
background: none;
-webkit-box-shadow: 0 0 0;
}
#uploader .filelist li p.progress span {
display: none;
overflow: hidden;
width:;
height: 100%;
background: #1483d8 url(../images/progress.png) repeat-x; -webit-transition: width 200ms linear;
-moz-transition: width 200ms linear;
-o-transition: width 200ms linear;
-ms-transition: width 200ms linear;
transition: width 200ms linear; -webkit-animation: progressmove 2s linear infinite;
-moz-animation: progressmove 2s linear infinite;
-o-animation: progressmove 2s linear infinite;
-ms-animation: progressmove 2s linear infinite;
animation: progressmove 2s linear infinite; -webkit-transform: translateZ(0);
} @-webkit-keyframes progressmove {
0% {
background-position: 0 0;
}
100% {
background-position: 17px 0;
}
}
@-moz-keyframes progressmove {
0% {
background-position: 0 0;
}
100% {
background-position: 17px 0;
}
}
@keyframes progressmove {
0% {
background-position: 0 0;
}
100% {
background-position: 17px 0;
}
} #uploader .filelist li p.imgWrap {
position: relative;
z-index:;
line-height: 110px;
vertical-align: middle;
overflow: hidden;
width: 110px;
height: 110px; -webkit-transform-origin: 50% 50%;
-moz-transform-origin: 50% 50%;
-o-transform-origin: 50% 50%;
-ms-transform-origin: 50% 50%;
transform-origin: 50% 50%; -webit-transition: 200ms ease-out;
-moz-transition: 200ms ease-out;
-o-transition: 200ms ease-out;
-ms-transition: 200ms ease-out;
transition: 200ms ease-out;
} #uploader .filelist li img {
width: 100%;
} #uploader .filelist li p.error {
background: #f43838;
color: #fff;
position: absolute;
bottom:;
left:;
height: 28px;
line-height: 28px;
width: 100%;
z-index:;
} #uploader .filelist li .success {
display: block;
position: absolute;
left:;
bottom:;
height: 40px;
width: 100%;
z-index:;
background: url(../images/success.png) no-repeat right bottom;
} #uploader .filelist div.file-panel {
position: absolute;
height:;
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#80000000', endColorstr='#80000000')\0;
background: rgba( 0, 0, 0, 0.5 );
width: 100%;
top:;
left:;
overflow: hidden;
z-index:;
} #uploader .filelist div.file-panel span {
width: 24px;
height: 24px;
display: inline;
float: right;
text-indent: -9999px;
overflow: hidden;
background: url(../images/icons.png) no-repeat;
margin: 5px 1px 1px;
cursor: pointer;
} #uploader .filelist div.file-panel span.rotateLeft {
background-position: 0 -24px;
}
#uploader .filelist div.file-panel span.rotateLeft:hover {
background-position: 0 0;
} #uploader .filelist div.file-panel span.rotateRight {
background-position: -24px -24px;
}
#uploader .filelist div.file-panel span.rotateRight:hover {
background-position: -24px 0;
} #uploader .filelist div.file-panel span.cancel {
background-position: -48px -24px;
}
#uploader .filelist div.file-panel span.cancel:hover {
background-position: -48px 0;
} #uploader .statusBar {
height: 63px;
border-top: 1px solid #dadada;
padding: 0 20px;
line-height: 63px;
vertical-align: middle;
position: relative;
} #uploader .statusBar .progress {
border: 1px solid #1483d8;
width: 198px;
background: #fff;
height: 18px;
position: relative;
display: inline-block;
text-align: center;
line-height: 20px;
color: #6dbfff;
position: relative;
margin: 0 10px 0 0;
}
#uploader .statusBar .progress span.percentage {
width:;
height: 100%;
left:;
top:;
background: #1483d8;
position: absolute;
}
#uploader .statusBar .progress span.text {
position: relative;
z-index:;
} #uploader .statusBar .info {
display: inline-block;
font-size: 14px;
color: #666666;
} #uploader .statusBar .btns {
position: absolute;
top: 10px;
right: 20px;
line-height: 40px;
} #filePicker2 {
display: inline-block;
float: left;
} #uploader .statusBar .btns .webuploader-pick,
#uploader .statusBar .btns .uploadBtn,
#uploader .statusBar .btns .uploadBtn.state-uploading,
#uploader .statusBar .btns .uploadBtn.state-paused {
background: #ffffff;
border: 1px solid #cfcfcf;
color: #565656;
padding: 0 18px;
display: inline-block;
border-radius: 3px;
margin-left: 10px;
cursor: pointer;
font-size: 14px;
float: left;
}
#uploader .statusBar .btns .webuploader-pick-hover,
#uploader .statusBar .btns .uploadBtn:hover,
#uploader .statusBar .btns .uploadBtn.state-uploading:hover,
#uploader .statusBar .btns .uploadBtn.state-paused:hover {
background: #f0f0f0;
} #uploader .statusBar .btns .uploadBtn {
background: #00b7ee;
color: #fff;
border-color: transparent;
}
#uploader .statusBar .btns .uploadBtn:hover {
background: #00a2d4;
} #uploader .statusBar .btns .uploadBtn.disabled {
pointer-events: none;
opacity: 0.6;
}
后台 c# 代码
public ActionResult UpImage(HttpPostedFileBase file)
{
if (file == null || file.ContentLength == )
{
var result = new { Code = -, Message = "文件为空", fileName = file.FileName, savePath = "", size = file.ContentLength };
return Json(result, JsonRequestBehavior.AllowGet);
} var r=false;
//这里上传图片,返回图片存储地址
var filepath="";
if (r)
{
var result = new { Code = , Message = "操作成功", fileName = file.FileName, savePath = filepath, size = file.ContentLength };
return Json(result, JsonRequestBehavior.AllowGet);
}
else
{
var result = new { Code = -, Message = "上传失败", fileName = file.FileName, savePath = filepath, size = file.ContentLength };
return Json(result, JsonRequestBehavior.AllowGet);
} } [HttpPost]
public ActionResult DelImage( string savefile)
{ var r;
//删除图片操作
if(r)
{
return Json(true, JsonRequestBehavior.AllowGet);
} }
return Json(false, JsonRequestBehavior.AllowGet);
}
webUploader 的使用的更多相关文章
- Asp.Net Mvc 使用WebUploader 多图片上传
来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- webuploader上传文件,图片
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.官方地址:http://fex.baidu.com/webupload ...
- webuploader 谷歌浏览器跨域
今天在本地调试webuploader 的image-upload demo时遇到跨域问题(本地post数据到同事的机器中) 会出现No 'Access-Control-Allow-Origin' he ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- webuploader在IE8/9下上传遇到的两个问题
最近在做图片上传功能. 点击一个按钮,弹出一个iframe,它是百度的webuploader插件 在点击关闭按钮时,IE9下总是会报错: __flash__removeCallback未定义错误 解决 ...
- 用百度webuploader分片上传大文件
一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传, ...
- mvc实现上传图片(上传和预览)webuploader
笔者看到mvc最近比较流行,而很多使用一些比较旧的的方法上传图片,再次安利一下百度的webuploader控件吧 webuploader第一步要先下载一些插件这点可以在webuploader官网上下载 ...
- WebUploader UEditor chrome 点击上传文件选择框会延迟几秒才会显示 反应很慢
chrome52.0.2743.80以上, accept: { title: 'Images', extensions: 'jpg,jpeg,png', mimeTypes: 'image/*' } ...
随机推荐
- 有关DotNetBar设计样式和运行时的样式不一致的问题
可以在 窗体类构造函数的InitializeComponent后加上下面圈出的内容: this.EnableGlass = false; 参考文章 DotNetBar如何控制窗体样式
- Shiro session和Spring session一样吗?
出自:https://yq.aliyun.com/articles/114167?t=t1 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢 ...
- Linux系统构架 - HA集群配置
一.安装 HA 即(high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 ...
- 留存- angularjs 弹出框 $modal
$modal只有一个方法:open,该方法的属性有: templateUrl:模态窗口的地址 template:用于显示html标签 scope:一个作用域为模态的内容使用(事实上,$modal会创建 ...
- MySQL 中随机获取数据
由于需要大概研究了一下MYSQL的随机抽取实现方法. 目前采用的方法: SELECT * FROM tablename ORDER BY RAND() LIMIT 实现原理: 通过ORDER BY R ...
- Spring2.5那些事之基于AOP的方法级注解式日志配置
在日常开发中经常需要在代码中加入一些记录用户操作日志的log语句,比如谁在什么时间做了什么操作,等等. 把这些对于开发人员开说无关痛痒的代码写死在业务方法中实在不是一件很舒服的事情,于是AOP应运而生 ...
- Logging模块总结 2018/5/30
日志的级别 Level 用处 数字级别 DEBUG 详细的信息,在调试过程中用于诊断错误 10 INFO 用于确认事件正在运行 20 WARNING 意外发生时予以提醒,或者预测一些未来可能发生的一些 ...
- len=in.read(b,0,len)和len=in.read(b)的区别
byte[] byte = new byte[1024]; int len =0 ; while((len=in.read(b))!=-1){ out.write(b,0,len); } read函数 ...
- linux shell脚本编程笔记(二): 分支结构
1.if if command then commands fi if command then commands else commands fi if command1 then command ...
- 解决VirtualBox 上的XP 关机时重启 , 启动时蓝屏 ,点击电源选项蓝屏
三个问题一次性解决. 启动时的蓝屏显示错误信息是: STOP 0x000000CE (...) DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION ...