-
Notifications
You must be signed in to change notification settings - Fork 267
/
imgUpload.html
204 lines (198 loc) · 6.32 KB
/
imgUpload.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet" />
<script type="text/javascript" charset="utf-8">
mui.init();
</script>
</head>
<body>
<header class="mui-bar mui-bar-nav">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">图片上传</h1>
<button class="mui-btn mui-btn-link mui-pull-right">
<span class="mui-icon mui-icon-camera"></span>
</button>
</header>
<div class="mui-content">
<h3>本示例插件<code>imageTool</code>将选择图片和拍照进行封装。</h3>
<br />
<h4>提供了四个对外接口</h4>
<ul>
<li>galleryImgs 从相册获取图片(上传),单选或多选,</li>
<li>camera 拍照(上传)</li>
<li>imgUpload 上传图片</li>
<li>zoomImage 压缩图片</li>
</ul>
<h3>1.图片上传添加上传数据</h3>
<p>为了保证代码的通用性,本插件为向上传任务中添加数据特意添加了接口</p>
<p>如果有需要,可以重写</p>
<pre>
imageTool.setUploadData=function(task) {
task.addData("client", "HelloH5+");
task.addData("uid", com.getUid());
}
</pre>
<h3>2.图片返回接口规范</h3>
<p>尤为要注意的是,同样为了保证代码的通用性,图片上传后返回的数据格式做了规范统一</p>
<p>upload.responseText的格式为:{code,url}</p>
<p>成功同样返回code=200</p>
<p>url为服务器图片地址</p>
<pre>
function imgUploadCom(path, cb) {
var uploadUrl = itool.options.uploadUrl;
var task = plus.uploader.createUpload(uploadUrl, {
method: "POST",
timeout: 10
}, function(t, status) {
if (status == 200) {
console.log(JSON.stringify(t));
var data = JSON.parse(t.responseText);
//上传成功后后台返回的数据格式规范为{code:200,url:'网络链接'}
if (data.code == 200) {
imgurl = data.url;
cb && cb(false, imgurl);
} else {
cb && cb(data.message);
}
} else {
cb && cb('上传失败!');
}
});
task.addFile(path, {
key: 'phillyx_' + com.getUid()
});
itool.setUploadData(task);
task.start();
}
</pre>
<h3>3.参数配置</h3>
<pre>
.options= {
uploadUrl: '', //图片上传地址
multiple: false, //是否多图上传,默认单选
maxPicsCount: 8, //默认一次最多选择8张图片
isZoom: true, //默认通过native.js压缩
ZoomBox: 1200, //缩放宽高,默认1200px,横图缩放宽度,高度根据比例计算,同理竖图
ZoomQuality: 89, //压缩图片的质量
isUpload: false, //默认不上传
system: false, //设置为true时,如果系统自带相册选择控件时则优先使用,否则使用5+统一相册选择控件;设置为false则不使用系统自带相册选择控件,直接使用5+统一相册选择界面。
};
</pre>
<h3>4.方法详细</h3>
<ul>
<li>
galleryImgs(cb) 具体使用参见示例
<p>
<strong>参数:</strong><br />
cb:function(err,list) --> list[{error,imgUrl}]
</p>
</li>
<li>
camera(cb)
<p>
<strong>参数:</strong><br />
cb:function(err,list) --> list[{error,imgUrl}]
</p>
</li>
<li>
imgUpload(path,cb)
<p>
<strong>参数:</strong><br /> path 图片上传路径,
<br /> cb:function(err,url){} url:图片服务器存放地址
</p>
</li>
<li>
zoomImage(path,cb)
<p>
<strong>参数:</strong><br /> path 压缩前的本地路径
<br /> cb:function(err,p) p:压缩后的本地路径
</p>
</li>
</ul>
</div>
<script src="js/common.js" type="text/javascript" charset="utf-8"></script>
<script src="js/img-tool/image-new.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
mui.plusReady(function() {
var o = imageTool.options;
o.uploadUrl = 'http://demo.dcloud.net.cn/helloh5/uploader/upload.php'; //图片上传链接
o.multiple = true; //默认只上传一张图片 ,如果要选择多张,请设置为true
o.maxPicsCount = 6; //默认一次最多选择10张图片,
o.ZoomBox = 1200; //缩放宽高,默认1200px,横图缩放宽度,高度根据比例计算,同理竖图
o.ZoomQuality = 89; //压缩图片的质量
o.isUpload = true; //默认不上传
var mine = plus.webview.currentWebview();
var btn = document.querySelector("button.mui-btn-link");
btn.addEventListener('touchend', function() {
if (!imageTool.options.uploadUrl) {
mui.alert('请填写图片上传链接');
return;
}
// 弹出系统选择按钮框
plus.nativeUI.actionSheet({
cancel: "取消",
buttons: [{
title: "从手机相册选择"
}, {
title: '拍照'
}]
},
function(e) {
console.log(JSON.stringify(e));
if (e.index == 1) { //点击从相册选择
console.log("相册选择");
getPics();
} else if (e.index == 2) {
console.log("拍照");
getPics(true);
}
}
);
})
});
function getPics(isCamera) {
// plus.nativeUI.showWaiting();
//可以设置mask
//main.setStyle({
// mask: '#ccc'
//});
if (!isCamera) {
imageTool.galleryImgs(doPics);
} else {
imageTool.camera(doPics);
}
}
function doPics(err, list) {
//因为dcloud官方上传地址上传后返回的格式并不是插件定义的规范,
//"responseText":"{\"strings\":{\"uid\":\"39106184\",\"client\":\"HelloH5+\"},\"error\":\"0\",\"files\":{\"phillyx_72192431\":{\"name\":\"1464411747097.jpg\",\"url\":\"files\\/1464411747097.jpg\",\"type\":\"image\\/jpeg\",\"size\":245329}}}"
//所以list内部数据都为空
var err = '';
var files = [];
if (err) {
console.log(err);
}
if (list) {
mui.each(list, function(index, item) {
console.log("err " + item.error);
if (item.imgUrl) {
files.push(item.imgUrl);
}
});
}
console.log('上传图片地址:' + JSON.stringify(files));
//关掉mask
//main.setStyle({
// mask: 'none'
//});
if (files.length > 0) {
//在这里做项目的逻辑,可以打开新页面将files传过去
}
};
</script>
</body>
</html>