百度上传控件webuploader的上传与修改,Java版本

一、webuploader的官网例子:点击打开链接

二、上传与编辑实现

1、引入CSSjs文件

    <script type="text/javascript" src="${basePath}/tools/webuploader/dist/webuploader.js"></script>
    <script type="text/javascript" src="${basePath}/js/upload/upload.js"></script>
    <link rel="stylesheet" type="text/css" href="${basePath}/tools/webuploader/css/webuploader.css" />
    <link rel="stylesheet" type="text/css" href="${basePath}/tools/webuploader/examples/image-upload/style.css" />
<div id="wrapper">
  <div id="container">
    <!--头部,相册选择和格式选择-->
    <div id="uploader">
      <div class="queueList">
        <div id="dndArea" class="placeholder">
          <div id="filePicker"></div>
          <p>或将文件拖到这里,单次最多可选300个</p>
        </div>
      </div>
      <div class="statusBar" style="display:none;">
        <div class="progress">
          <span class="text">0%</span>
          <span class="percentage"></span>
        </div>
        <div class="info"></div>
        <div class="btns">
          <div id="filePicker2"></div>
          <div class="uploadBtn">开始上传</div></div>
      </div>
    </div>
  </div>
</div>

2、实例化webuploader

可以添加对应的mimetype 选择对应的文件上传,这样就不会局限于图片

// 实例化
uploader = WebUploader.create({
    pick: {
        id: '#filePicker',
        label: '点击选择文件'
    },
    formData: {
        uid: 'yangl'
    },
    dnd: '#dndArea',
    paste: '#uploader',
    swf: '../../dist/Uploader.swf',
    chunked: false,
    chunkSize: 512 * 1024,
    server: getRootPath() + '/upload/fileuploadAction!saveUploadFile.action',
    // runtimeOrder: 'flash',
    accept: {
        title: 'Files',
        extensions: 'gif,jpg,jpeg,bmp,png,pdf,doc,docx,txt,xls,xlsx,ppt,pptx',
        mimeTypes: 'image/*,text/*'
        //word
        + ',application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        //excel
        + ',application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        //ppt
        + ',application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation' + ',application/pdf'
    },

    // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
    disableGlobalDnd: true,
    fileNumLimit: 300,
    fileSizeLimit: 200 * 1024 * 1024,
    // 200 M
    fileSingleSizeLimit: 50 * 1024 * 1024 // 50 M
});

3、上传实现

//上传成功
uploader.on('uploadSuccess',
function(file, json) {
	var file_id = file.id;
	var arr = file_id.split("_");
	$("#" + file_id).append(inputStr(arr[2], json));
});

function inputStr(index, json) {
	var inputStr = '';
	//转化格式后的名称
	inputStr += '<input name="' + pre + 'list[' + index + '].filename"   value="' + json.filename + '" style="display:none"/>';
	//保存路径
	inputStr += '<input name="' + pre + 'list[' + index + '].filepath"   value="' + json.filepath + '" style="display:none"/>';
	//文件源名称
	inputStr += '<input name="' + pre + 'list[' + index + '].filebasename"   value="' + json.filebasename + '" style="display:none"/>';

	//文件类型  doc?xls?
	inputStr += '<input name="' + pre + 'list[' + index + '].filetype"   value="' + json.filetype + '" style="display:none"/>';
	//文件大小
	inputStr += '<input name="' + pre + 'list[' + index + '].filelen"   value="' + json.filelen + '" style="display:none"/>';
	//doc转为html
	inputStr += '<input name="' + pre + 'list[' + index + '].doc2htmlpath" value="' + json.doc2htmlpath + '"  style="display:none"/>';
	//mimeType
	inputStr += '<input name="' + pre + 'list[' + index + '].mimeType" value="' + json.mimeType + '"  style="display:none"/>';
	return inputStr;
}

Java上传代码:
获取webuploader的返回参数:

private String uid; //formData里的参数
private String id; //文件ID,每个对象具有唯一ID,与文件名无关
private String name; //文件名,包括扩展名(后缀)
private String type; //mimetype
private String size; //文件体积(字节)
private String fileContentType;
private String lastModifiedDate; //文件最后修改日期
private String ext;
private String fileFileName; //文件名,包括扩展名(后缀)
private File file; //文件路径

response返回:

Json json = new Json();
json.setFilename(newFileName);
json.setFilebasename(fileFileName);
json.setFilepath(bPath);
json.setFiletype(suffix);
json.setDoc2htmlpath(wordFileName);
json.setFilelen(size);
json.setMimeType(type);
OutputJson(json);

提交到service层批量保存:

public void saveTSysFilesList(File file) {
	String remark = file.getRemark();
	List < Json > jsonList = file.getList();
	if (jsonList != null && jsonList.size() > 0) {
		TSysFiles tsysFiles = null;
		for (Json json: jsonList) {
			if (json != null) {
				tsysFiles = new TSysFiles();
				tsysFiles.setFilename(this.trimFileValue(json.getFilename()));
				tsysFiles.setFilepath(this.trimFileValue(json.getFilepath()));
				tsysFiles.setFilebasename(this.trimFileValue(json.getFilebasename()));
				tsysFiles.setFiletype(this.trimFileValue(json.getFiletype()));
				tsysFiles.setDoc2htmlpath(this.trimFileValue(json.getDoc2htmlpath()));
				tsysFiles.setMntm(DateUtils.getNowTime());
				tsysFiles.setId(json.getId());
				tsysFiles.setFilelen(Double.parseDouble(json.getFilelen()));
				tsysFiles.setRemark(remark);
				tsysFiles.setMimeType(this.trimFileValue(json.getMimeType()));
				publicDao.saveOrUpdate(tsysFiles);
			}
		}
	}
}

4、编辑实现

uploader.on('ready', function() {}准备工作时加入已有的文件:

uploader.on('ready',
function() {
	window.uploader = uploader;
	//            alert(WebUploader.Base.version);
	//            alert(WebUploader.File.name);
	if (fileid) {
		//获取数据
		$.post(getRootPath() + '/files/tsysFilesAction!findTSysFilesByParam.action', {
			param: " and fileid='" + fileid + "' "
		},
		function(json) {
			var jsonLen = json.rows.length;
			if (jsonLen != 0) {
				fileCount = jsonLen;
				$placeHolder.addClass('element-invisible');
				$statusBar.show();
				//显示在页面上
				$.each(json.rows,
				function(i, n) {
					fileSize += n.filelen;
					var obj = {},
					statusMap = {},
					file_id = 'WU_FILE_' + i;
					obj.id = file_id;
					obj.name = n.filebasename;
					obj.filename = n.filename;
					obj.getStatus = function() {
						return '';
					};
					obj.statusText = '';
					obj.size = n.filelen;
					obj.version = WebUploader.Base.version;
					obj.type = n.mimeType;
					obj.filetype = n.filetype;
					obj.source = this;
					obj.setStatus = function(status, text) {

						var prevStatus = statusMap[this.id];

						typeof text !== 'undefined' && (this.statusText = text);

						if (status !== prevStatus) {
							statusMap[this.id] = status;
							/**
                                 * 文件状态变化
                                 * @event statuschange
                                 */
							uploader.trigger('statuschange', status, prevStatus);
						}

					};
					editFile(obj);
					$("#" + file_id).append(inputStr(i, n));
				});

				WebUploader.Base.idSuffix = jsonLen;

				setState('ready');
				updateTotalProgress();
			}
		},
		'json');
	}
});

加入编辑file:

function editFile(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>');

	if (file.getStatus() === 'invalid') {
		showError(file.statusText);
	} else {
		// @todo lazyload
		$wrap.empty();
		$wrap.text('不能预览');

		var img;
		//判断是否是图片
		if (containsPic(file.filetype)) {
			//读取文件流
			var src = getRootPath() + '/download/fileDownLoadAction!showFile.action?fileName=' + file.filename;
			img = $('<img src="' + src + '" style="height:100%;">');
			$wrap.empty().append(img);
		}

		percentages[file.id] = [file.size, 0];
		file.rotation = 0;
	}

	$li.append('<span class="success"></span>');

	$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) + ')');
		}

	});

	$li.appendTo($queue);
}

修改文件webuploader.js:

属性封装

  define('file',[
        'base',
        'mediator'
    ], function( Base, Mediator ) 

里的代码:将

    function gid() {
                return idPrefix + idSuffix++;
            }

改为:

    function gid() {
            	if(idSuffix == 0){
            		idSuffix = Base.idSuffix;
            	}
            	console.log("file.gid():"+idPrefix + idSuffix);
                return idPrefix + idSuffix++;
            }

修改

define('base',[
        'dollar',
        'promise'
    ], function( $, promise )

里的返回值:

新增一个属性idSuffix: 0,
在这里插入图片描述
编辑service:

先删除,在插入

    public void updateTSysFilesList(File file) {
    		this.deleteTSysFilesByFileId(file.getId());
    		this.saveTSysFilesList(file);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值