webuploader + cropper 真正的PC/H5同一页面多实例+裁剪+分片上传asp+demo

 

 

这两个插件 webuploader 和 cropper 应该都不陌生了。其功能不做介绍了,本人在实现同一页面多实例带裁剪分片上传功能上也踩过一些坑。网上下载了几个demo,

要命不完整的,要么裁剪后还是上传的原图,居然其缩略图通过formData 接口随带参数方式 request 来发送,浏览器提示数据过长,那是不理想的做法。

这里先说一个 webuploader 对开启 DND 功能后,在同一页面多实例模式可能会有一个小小的bug,自动插入的下面代码多出来的有,网上的所有相关demo都是这样的。不知道是不是 webuploader 在 DND 模块有逻辑问题,没做进一步测试,但不影响使用。

<div id="rt_rt_1em0n87rb14ag10bk11dspnnuh61" 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>

 

好了,先放出我测试用到的各插件版本:

webuploader 0.1.8-alpha(当前最新版)

官方文档:http://fex.baidu.com/webuploader/doc/index.html

项目仓库:https://github.com/fex-team/webuploader

Cropper.js v2.0.0-alpha.1(当前最新版)

项目地址:https://fengyuanchen.github.io/cropper.js

官方文档:https://github.com/fengyuanchen/cropperjs/blob/v2/README.md

我这个的 demo 用到了 Bootstrap v4.5.3 ,我也打包进来了,数据接收端是 asp 写的,如果还有asp做项目的可以参考,其他语言的可以忽略服务端 server.asp 文件了。

看几张图吧【如果看着图片太小,可通过浏览器新标签打开来看】:

【图一:界面】↓

【图二:缩图队列,这里的缩图有两种预览模式可选,即一种是原图缩放后的缩图(按最大边生成),二种是原图裁剪生成缩图(按最小边边生成) 图三】↓

【图三】↓

【图四:缩图上的功能按钮,在完成裁剪后除了删除按钮,其他按钮移除】↓

【图五:裁剪界面】↓

【图六:裁剪后返回的缩图】↓

【图七:上传进度】↓

【图八:上传结果】↓

 

【前端页面代码】↓

<!DOCTYPE html>
<html lang="zh-CN">
<head>
	<meta charset="UTF-8">
	<title>WebUploader演示 + Cropper裁剪 - 支持同一页面多实例</title>
	<link rel="stylesheet" type="text/css" href="bc/webuploader.css" />
	<link rel="stylesheet" type="text/css" href="bc/cropper.min.css" />
	<link rel="stylesheet" type="text/css" href="bc/bootstrap.min.css" />
	<link rel="stylesheet" type="text/css" href="style.css" />

<style>
.xmuploader-views .progress {background-color:transparent;}
.img-container img{/*重要*/ display: block;max-width:100%;max-height:500px;}
#quick-edit .preview{/*重要*/ overflow:hidden;}
p.text-sm{font-size:13px;}
</style>
</head>
<body>
<div class="wrapper">
	<!------------ 实例1 ------------------->
        <div class="xmuploader-views uploder-container" uploder-config="{
			'root'  : '/',
			'result': 'sku-0-images',
			'thumb' :{
				'width' : 120,
				'height': 120
			},
			'crop' : {
				'width' : 800,
				'height': 800
			}
		}">
		<input type="hidden" name="sku-0-images" />
		<div class="queueList">
			<div class="placeholder">
				<div class="btn-addfile">点击选择图片</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 class="btn-addmore">追加文件</div>
				<div class="uploadBtn">开始上传</div>
			</div>
		</div>
		<div class="alert-msg" style="display:none;"></div>
	</div>

	<!------------ 实例2 ------------------->
        <div class="xmuploader-views uploder-container" uploder-config="{
			'root'  : '/',
			'result': 'sku-1-images',
			'thumb' :{
				'width' : 120,
				'height': 120
			},
			'crop' : {
				'width' : 1200,
				'height': 600
			}
		}">
		<input type="hidden" name="sku-1-images" />
		<div class="queueList">
			<div class="placeholder">
				<div class="btn-addfile">点击选择图片</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 class="btn-addmore">追加文件</div>
				<div class="uploadBtn">开始上传</div>
			</div>
		</div>
		<div class="alert-msg" style="display:none;"></div>
	</div>
</div>
<div id="quick-edit" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
	<div class="modal-dialog modal-dialog-centered modal-lg">
		<div class="modal-content">
			<div class="modal-header">
				<h5 class="modal-title" id="exampleModalLabel">裁剪图片</h5>
				<button type="button" class="modal-close" data-dismiss="modal" aria-label="Close">
					<span aria-hidden="true">&times;</span>
				</button>
			</div>
			<div class="modal-body">
				<div class="row" style="padding:15px;">
					<div class="col-sm-8 col-12">
						<div class="img-container">
							<img src="" id="image_cropper" alt="Picture">
						</div>
					</div>
					<div class="col-sm-4 col-12">
						<div class="row">
							<div class="col-6" style="padding-right:6px;">
								<div class="preview"></div>
							</div>
							<div class="col-4" style="padding-left:6px;padding-right:6px;">
								<div class="preview"></div>
							</div>
							<div class="col-2" style="padding-left:6px;">
								<div class="preview"></div>
							</div>
						</div>
						<div class="col-12 mt-2">
							<div class="icheck-hope d-inline mb-3">
								<input type="radio" value="1" name="image-crop-type" id="image-crop-type-1" checked />
								<label for="image-crop-type-1"><b>裁剪图片</b></label>
							</div>
							<p class="text-secondary text-sm" style="text-indent:2rem;">虚线框内为裁剪范围</p>
						</div>
						<div class="col-12 mb-1">
							<div class="icheck-danger d-inline mb-3">
								<input type="radio" value="2" name="image-crop-type" id="image-crop-type-2" />
								<label for="image-crop-type-2"><b>留白边</b></label>
							</div>
							<p class="text-secondary text-sm" style="text-indent:2rem;">不裁剪,虚线内如果有白边,保存后也会有白边</p>
						</div>
						<div class="col-12 text-secondary">
							<p class="text-sm">说明:裁剪图片/留白边功能没做,按照cropper的接口做即可。</p>
						</div>
						<div class="col-12 mb-1">
							<div class="btn-group btn-group-sm" role="group">
								<span role="button" class="btn btn-sm btn-dark btn-crop-tool" data-method="rotate" data-option="-90">逆转90°</span>
								<span role="button" class="btn btn-sm btn-dark btn-crop-tool" data-method="rotate" data-option="90">顺转90°</span>
								<span role="button" class="btn btn-sm btn-dark btn-crop-tool" data-method="zoom"   data-option="-0.1">缩小</span>
								<span role="button" class="btn btn-sm btn-dark btn-crop-tool" data-method="zoom"   data-option="0.1">放大</span>
							</div>
						</div>
					</div>
					<div class="col-12 mt-3 text-center">
						<button type="button" class="btn btn-sm btn-success btn-crop-reset">还原</button>
						<button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
						<button type="button" class="btn btn-sm btn-danger btn-isok">确定</button>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>

	<script type="text/javascript" src="bc/jquery.min.js"></script>
	<script type="text/javascript" src="bc/bootstrap.bundle.min.js"></script>
	<script type="text/javascript" src="bc/webuploader.min.js"></script>
	<script type="text/javascript" src="bc/cropper.min.js"></script>
	<script type="text/javascript" src="xm.uploader.sm.js"></script>

</body>
</html>

【前端配置说明】↓

	<!------------ 实例1 ------------------->
        <div class="xmuploader-views uploder-container" uploder-config="{
			'root'  : '/',
			'result': 'sku-0-images',
			'thumb' :{
				'width' : 120,
				'height': 120
			},
			'crop' : {
				'width' : 800,
				'height': 800
			}
		}">

每一个实例按此分开配置即可,自己也可以扩展。

root:站点安装目录,一般为“/”即可,result:是要返回上传后的地址的input的name,thumb:预览图尺寸,crop:图片裁剪后要保存的尺寸。

两种预览图生成模式可自己扩展进前端页面配置选择:

另外说明:因为后端是asp的,搞asp的朋友现在不多了,后端asp的处理函数没有放进去,应该会asp的都能看懂。由于本人jQuery不怎么好,本程序应该还有很多能优化改善的地方,欢迎大家指点。

下载地址:webuploader + cropper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值