本人绝对菜鸟,高手勿喷

菜鸟开发中的解决方法,高手勿喷

1、针对同一应用中不同的类别,存放不同的路径

在页面中添加,hidden属性的标记,如:    type="hidden" name="picpath" id="picpath" value="/uploaderimage/ad/"

js中: server: locat+'/pic/save.do?path='+$('#picpath').val(),

uploader = WebUploader.create({
pick: {
id: '#filePicker',
label: '点击选择图片'
},
formData: {
uid: 123 },
dnd: '#dndArea',
paste: '#uploader',
swf: './Uploader.swf',
chunked: false,
chunkSize: 512 * 1024, server: locat+'/pic/save.do?path='+$('#picpath').val(), accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/*'
},
// 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
disableGlobalDnd: true,
fileNumLimit: 6,
fileSizeLimit: 20 * 1024 * 1024, // 20M
fileSingleSizeLimit: 1 * 1024 * 1024 //1 M
});

后台返回接收一下:

uploader.on( 'uploadAccept', function( file, response )
{
$('#PIC').val($('#PIC').val()+';'+response.filename);
});

java后台部分:

@RequestMapping(value="/save")
@ResponseBody
public String save(
@RequestParam(required=false) MultipartFile file,String path,HttpServletResponse response
) throws Exception{
String fileName = ""; if (null != file && !file.isEmpty()) {
//执行上传
String filePath = PathUtil.getClasspath()+path ;
fileName = FileUpload.fileUp(file, filePath, this.get32UUID()); //执行上传
System.out.println("上传成功"); }else{
System.out.println("上传失败");
}
//路径
JSONObject result=new JSONObject();
result.put("filename", fileName);
result.put("success", true); ResponseUtil.write(response, result);
return null;
}

webuploader是逐个上传的,存入数据库也是有几个存几次的,多图上传要注意。

完整的前端js:

(function( $ ){
// 当domReady的时候开始初始化
$(function() {
var $wrap = $('#uploader'), // 图片容器
$queue = $( '<ul class="filelist"></ul>' )
.appendTo( $wrap.find( '.queueList' ) ), // 状态栏,包括进度和控制按钮
$statusBar = $wrap.find( '.statusBar' ), // 文件总体选择信息。
$info = $statusBar.find( '.info' ), $file = $statusBar.find( '.file' ),
// 上传按钮
$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 = {},
// 判断浏览器是否支持图片的base64
isSupportBase64 = ( function() {
var data = new Image();
var support = true;
data.onload = data.onerror = function() {
if( this.width != 1 || this.height != 1 ) {
support = false;
}
};
data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
return support;
} )(), // 检测是否已经安装flash,检测flash的版本
flashVersion = ( function() {
var version; try {
version = navigator.plugins[ 'Shockwave Flash' ];
version = version.description;
} catch ( ex ) {
try {
version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')
.GetVariable('$version');
} catch ( ex2 ) {
version = '0.0';
}
}
version = version.match( /\d+/g );
return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );
} )(), 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('flash') && WebUploader.browser.ie ) { // flash 安装了但是版本过低。
if (flashVersion) {
(function(container) {
window['expressinstallcallback'] = function( state ) {
switch(state) {
case 'Download.Cancelled':
alert('您取消了更新!');
break; case 'Download.Failed':
alert('安装失败');
break; default:
alert('安装已成功,请刷新!');
break;
}
delete window['expressinstallcallback'];
}; var swf = './expressInstall.swf';
// insert flash object
var html = '<object type="application/' +
'x-shockwave-flash" data="' + swf + '" '; if (WebUploader.browser.ie) {
html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
} html += 'width="100%" height="100%" style="outline:0">' +
'<param name="movie" value="' + swf + '" />' +
'<param name="wmode" value="transparent" />' +
'<param name="allowscriptaccess" value="always" />' +
'</object>'; container.html(html); })($wrap); // 压根就没有安转。
} else {
$wrap.html('<a href="http://www.adobe.com/go/getflashplayer" target="_blank" border="0"><img alt="get flash player" src="http://www.adobe.com/macromedia/style_guide/images/160x41_Get_Flash_Player.jpg" /></a>');
} return;
} else if (!WebUploader.Uploader.support()) {
alert( 'Web Uploader 不支持您的浏览器!');
return;
} var locat = (window.location+'').split('/');
if('pictures'== locat[3]){locat = locat[0]+'//'+locat[2];}else{locat = locat[0]+'//'+locat[2]+'/'+locat[3];};
uploader = WebUploader.create({
pick: {
id: '#filePicker',
label: '点击选择图片'
},
formData: {
uid: 123 },
dnd: '#dndArea',
paste: '#uploader',
swf: './Uploader.swf',
chunked: false,
chunkSize: 512 * 1024,
//server: 'http://127.0.0.1:8080/pictures/save.do',
server: locat+'/pic/save.do?path='+$('#picpath').val(),
//runtimeOrder: 'flash', accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/*'
}, // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
disableGlobalDnd: true,
fileNumLimit: 6,
fileSizeLimit: 20 * 1024 * 1024, // 20M
fileSingleSizeLimit: 1 * 1024 * 1024 //1 M
}); // 拖拽时不接受 js, txt 文件。
uploader.on( 'dndAccept', function( items ) {
var denied = false,
len = items.length,
i = 0,
// 修改js类型
unAllowed = 'text/plain;application/javascript '; for ( ; i < len; i++ ) {
// 如果在列表里面
if ( ~unAllowed.indexOf( items[ i ].type ) ) {
denied = true;
break;
}
} return !denied;
}); uploader.on( 'uploadAccept', function( file, response )
{
$('#PIC').val($('#PIC').val()+';'+response.filename);
}); // 添加“添加文件”的按钮,
uploader.addButton({
id: '#filePicker2',
label: '继续添加'
}); uploader.on('ready', function() {
window.uploader = uploader;
}); // 当有文件添加进来时执行,负责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 ) {
var img; if ( error ) {
$wrap.text( '不能预览' );
return;
} if( isSupportBase64 ) {
img = $('<img src="'+src+'">');
$wrap.empty().append( img );
} else {
$.ajax('../../server/preview.php', {
method: 'POST',
data: src,
dataType:'json'
}).done(function( response ) {
if (response.result) {
img = $('<img src="'+response.result+'">');
$wrap.empty().append( img );
} else {
$wrap.text("预览出错");
}
});
}
}, 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+ '张照片,'+
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.hide();
$statusBar.addClass( 'element-invisible' );
uploader.refresh();
break; case 'ready':
$placeHolder.addClass( 'element-invisible' );
$( '#filePicker2' ).removeClass( 'element-invisible');
$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();
$( '#filePicker2' ).removeClass( 'element-invisible' );
$upload.text( '开始上传' ); stats = uploader.getStats();
if ( stats.successNum && !stats.uploadFailNum ) {
setState( 'finish' );
return;
}
break;
case 'finish':
stats = uploader.getStats();
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 ) {
if(code == 'F_DUPLICATE'){
alert( '图片重复' );
}else{
alert( 'Eroor: ' + code );
}
}; $upload.on('click', function() {
if ( $(this).hasClass( 'disabled' ) ) {
return false;
} if ( state === 'ready' ) { uploader.upload();
} else if ( state === 'paused' ) {
uploader.upload();
} else if ( state === 'uploading' ) {
uploader.stop();
}
}); $info.on( 'click', '.retry', function() {
uploader.retry();
} ); $info.on( 'click', '.ignore', function() {
alert( 'todo' );
} ); $upload.addClass( 'state-' + state );
updateTotalProgress();
}); })( jQuery );

webuploader插件使用中的一点东西的更多相关文章

  1. 关于BIOS的一点东西

    关于BIOS的一点东西 编辑删除转载2016-05-20 00:36:36 去把BIOS的每个单词意思都有道一遍就都明白了,BOOT是更改 启动顺序的(台式机一直按del键就会进入BIOS界面,用上下 ...

  2. Thinkphp拖拽上传文件-使用webuploader插件(自己改动了一些地方)——分片上传

    html页面: <!DOCTYPE html> <html class="js cssanimations"> <head> <meta  ...

  3. JSP+SpringMVC框架使用WebUploader插件实现注册时候头像图片的异步上传功能

    一.去官网下载webuploader文件上传插件 https://fex.baidu.com/webuploader/ 下载好后把它放到Javaweb项目的文件夹中(我放到了webcontent下面的 ...

  4. 视频大文件分片上传(使用webuploader插件)

    背景 公司做网盘系统,一直在调用图片服务器的接口上传图片,以前写的,以为简单改一改就可以用 最初要求 php 上传多种视频格式,支持大文件,并可以封面截图,时长统计 问题 1.上传到阿里云服务器,13 ...

  5. 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收

    利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介   WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  6. 文件上传 tp3.2 webuploader插件

    1.新建上传页面 <!doctype html> <html lang="en"> <head> <meta charset=" ...

  7. webuploader插件,我踩得坑

    我在目前的公司做的项目要么是原生写法去做项目,要么就是vue+webpack做项目,但是vue这部分只是用了模板template,vue其他的都没用. 有一个项目需要做上传图片的功能,老大扔给我一个插 ...

  8. webuploader插件使用分析

    大致架构: 前端:html5+ajax 后端:java (struts框架相关) 碰到问题: 后台coder给我提供一个接口./file/uploader.do?upFile=?,让我上传文件对应up ...

  9. MVC 使用 Webuploader 插件 传递额外参数 备忘笔记

    // 实例化 uploader = WebUploader.create({ pick: { id: '#filePicker-2', label: '点击选择图片' }, formData: { k ...

随机推荐

  1. Informix 启动 Fatal error in shared memory initialization解决方法

    https://blog.csdn.net/cy309173854/article/details/54929735

  2. ORA-01157:无法标识/锁定数据文件,ORA-01110:表空间丢失错误

    https://blog.csdn.net/u014432433/article/details/51051854

  3. 51nod 1649.齐头并进-最短路(Dijkstra)

    1649 齐头并进 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过 ...

  4. HDU 1426 Sudoku Killer (回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...

  5. python获取小程序手机号并绑定

    最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑. 流程介绍 官方流程图 小程序使用方法 需要将 <button> 组件 open-type 的值设 ...

  6. 51Nod - 1405 树的距离之和(树形DP)

    1405 树的距离之和 题意 给定一棵无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离(最短路径)之和. 分析 树形DP. 首先我们让 \(1\) 为根.要开两个数组 \(up \ d ...

  7. luogu P3818 小A和uim之大逃离 II

    题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...

  8. [CF623E]Transforming Sequence

    $\newcommand{\align}[1]{\begin{align*}#1\end{align*}}$题意:对于一个序列$a_{1\cdots n}(a_i\in[1,2^k-1])$,定义序列 ...

  9. Android Studio+WebApi(一)属于我们自己的App

    AndroidStudio(以后都简称AS),作为google的亲儿子,终于出了个像样的android ide,再也不用在eclipse中又是Adt,又是这又是那的,一大堆的集成了.废话不多说,这个系 ...

  10. Oracle ORA-01033: 错误解决办法

    转自 Oracle ORA-01033: 错误解决办法