dever 4 years ago
parent
commit
8d22e88a18
2 changed files with 168 additions and 93 deletions
  1. 164 93
      assets/lib/layui/upload.js
  2. 4 0
      assets/lib/oss/aliyun-oss-sdk-6.11.2.min.js

+ 164 - 93
assets/lib/layui/upload.js

@@ -250,6 +250,7 @@ function loadUploadL(i,e,key,url,assets)
 	var domain = e.attr('domain');
 	var path = e.attr('path');
 	var cover = e.attr('cover');
+	var type = e.attr('m');
 	var search = '';
 	if (e.attr('upload_search_value')) {
 		search = e.attr('upload_search_value');
@@ -260,118 +261,188 @@ function loadUploadL(i,e,key,url,assets)
 	var uploadUrl = url;
 	url = domain;
 
-	var layerConfig = {
-      useCdnDomain: true,
-      disableStatisticsReport: false,
-      retryCount: 6
-    };
-    var putExtra = {
-      fname: "",
-      params: {},
-      mimeType: null
-    };
+    
     layui.use(['layer','element'], function() {
     	var layer = layui.layer;
 		var element = layui.element;
 		$("#" + id).unbind("change").bind("change",function() {
 		    var file = this.files[0];
-		    // eslint-disable-next-line
-		    var finishedAttr = [];
-		    // eslint-disable-next-line
-		    var compareChunks = [];
-		    var observable;
+		    
 		    if (file) {
 
-		    	element.progress(id + '_progress', '0%')
+				element.progress(id + '_progress', '0%');
 				layer.load(); 
 
-		      var filename = file.name;
-		      var temp = filename.split('.');
-		      putExtra.params["x:name"] = temp[0];
-
-		      filename = path + hex_md5(file.name) + '.' + temp[temp.length-1];
-
-		      //不覆盖
-		      if (cover == 2) {
-		      		var timestamp = Date.parse(new Date());
-		      		filename = path + hex_md5(file.name + '_' + timestamp) + '.' + temp[temp.length-1];
-		      }
+				var filename = file.name;
+				var temp = filename.split('.');
+				var name = temp[0];
+				filename = path + hex_md5(file.name) + '.' + temp[temp.length-1];
 
-		      // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作
-		      var error = function(err) {
-		        //请求异常回调
-				layer.alert('文件上传错误1');
-				element.progress(id + '_progress', '0%')
-				$('#' + id + '_progress').hide();
-				layer.closeAll('loading');
-		      };
+				//不覆盖
+				if (cover == 2) {
+					var timestamp = Date.parse(new Date());
+					filename = path + hex_md5(file.name + '_' + timestamp) + '.' + temp[temp.length-1];
+				}
 
-		      var complete = function(res) {
-		      //&& res.key.match(/\.(jpg|jpeg|png|gif)$/)
-		        if (res.key) {
-		        	 element.progress(id + '_progress', '0%')
+				// 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作
+				var error = function(err) {
+					//请求异常回调
+					layer.alert('文件上传错误');
+					element.progress(id + '_progress', '0%')
 					$('#' + id + '_progress').hide();
 					layer.closeAll('loading');
-					var data = {};
-			      if (res.hash) {
-
-			      	if (search.indexOf('#') != -1) {
-						var temp = search.split('#');
-						search = temp[0];
-						if (temp[1]) {
-							temp[1] = $('#update_'+temp[1]+'_value').val();
-							if (temp[1] > 0) {
-								search = search + '_' + temp[1];
+				};
+
+				var complete = function(res) {
+					//&& res.key.match(/\.(jpg|jpeg|png|gif)$/)
+					if (res.key) {
+						element.progress(id + '_progress', '0%')
+						$('#' + id + '_progress').hide();
+						layer.closeAll('loading');
+						var data = {};
+						if (res.hash) {
+							if (search.indexOf('#') != -1) {
+								var temp = search.split('#');
+								search = temp[0];
+								if (temp[1]) {
+									temp[1] = $('#update_'+temp[1]+'_value').val();
+									if (temp[1] > 0) {
+										search = search + '_' + temp[1];
+									}
+								}
 							}
+
+							$.getJSON(uploadUrl.replace('save.start', 'yun.addFile'), {source:file.name,file:res.key, key:key, search:search});
+							data.status = 1;
+							data.name = res.key;
+							data.url = host + res.key;
+
+							loadUploadSet(e,value,data,key);
+						} else {
+							layer.alert('文件上传错误');
+							return false;
 						}
 					}
+				};
+
+				if (type == 'qiniu') {
+					qiniuHandle(id, name, token, file, filename, element, error, complete);
+				} else if(type == 'oss') {
+					ossHandle(id, name, token, file, filename, element, error, complete);
+				}
+	     	}
+	  	});
+	});
+}
 
-			      	$.getJSON(uploadUrl.replace('save.start', 'qiniu.addFile'), {source:file.name,file:res.key, key:key, search:search});
-						data.status = 1;
-						data.name = res.key;
-						data.url = host + res.key;
+function ossHandle(id, name, token, file, filename, element, error, complete)
+{
+	console.info(id);
 
-						loadUploadSet(e,value,data,key);
-					} else {
-						layer.alert('文件上传错误2');
-						return false;
-					}
-		        }
-		      };
-
-		      var next = function(response) {
-		        var chunks = response.chunks||[];
-		        var total = response.total;
-		        // 这里对每个chunk更新进度,并记录已经更新好的避免重复更新,同时对未开始更新的跳过
-		        for (var i = 0; i < chunks.length; i++) {
-		          if (chunks[i].percent === 0 || finishedAttr[i]){
-		            continue;
-		          }
-		          if (compareChunks[i].percent === chunks[i].percent){
-		            continue;
-		          }
-		          if (chunks[i].percent === 100){
-		            finishedAttr[i] = true;
-		          }
-		      }
-		      $('#' + id + '_progress').show();
-				  element.progress(id + '_progress', parseInt(total.percent)+'%')
-		        compareChunks = chunks;
-		      };
-
-		      var subObject = { 
-		        next: next,
-		        error: error,
-		        complete: complete
-		      };
-		      var subscription;
-		      // 调用sdk上传接口获得相应的observable,控制上传和暂停
-		      observable = qiniu.upload(file, filename, token, putExtra, layerConfig);
-
-		      subscription = observable.subscribe(subObject);
-	     }
+	let OSS = require('ali-oss')
+
+	let ossConfig = {
+	  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
+	  region: 'oss-cn-beijing',
+	  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
+	  accessKeyId: '<Your AccessKeyId>',
+	  accessKeySecret: '<Your AccessKeySecret>',
+	  bucket: 'Your bucket name'
+	}
+
+	let client = new OSS(ossConfig);
+
+	let tempCheckpoint;
+
+	// 定义上传方法。
+	async function multipartUpload () {
+	  try {
+	    // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
+	    let result = await client.multipartUpload('object-key', 'file-object', { 
+	      progress: function (p, checkpoint) {
+	        // 断点记录点。浏览器重启后无法直接继续上传,您需要手动触发上传操作。
+	        tempCheckpoint = checkpoint;
+	      },
+	      meta: { year: 2020, people: 'test' },
+	      mime: 'image/jpeg'
+	   })
+	  } catch(e){
+	    console.log(e);
+	  }
+	}
+
+	// 开始分片上传。
+	multipartUpload();
+
+	// 暂停分片上传。
+	client.cancel();
+
+	// 恢复上传。
+	let resumeclient = new OSS(ossConfig);
+	async function resumeUpload () {
+	  try {
+	    let result = await resumeclient.multipartUpload('object-key', 'file-object', {
+	    progress: function (p, checkpoint) {
+	          tempCheckpoint = checkpoint;
+	        },
+	        checkpoint: tempCheckpoint,
+	        meta: { year: 2020, people: 'test' },
+	        mime: 'image/jpeg'
 	  })
-	});
+	  } catch (e) {
+	    console.log(e);
+	  }
+	}
+
+	resumeUpload();
+}
+
+function qiniuHandle(id, name, token, file, filename, element, error, complete)
+{
+	// eslint-disable-next-line
+	var finishedAttr = [];
+	// eslint-disable-next-line
+	var compareChunks = [];
+	var observable;
+	var subscription;
+	var next = function(response) {
+		var chunks = response.chunks||[];
+		var total = response.total;
+		// 这里对每个chunk更新进度,并记录已经更新好的避免重复更新,同时对未开始更新的跳过
+		for (var i = 0; i < chunks.length; i++) {
+			if (chunks[i].percent === 0 || finishedAttr[i]){
+				continue;
+			}
+			if (compareChunks[i].percent === chunks[i].percent){
+				continue;
+			}
+			if (chunks[i].percent === 100){
+				finishedAttr[i] = true;
+			}
+		}
+		$('#' + id + '_progress').show();
+		element.progress(id + '_progress', parseInt(total.percent)+'%')
+		compareChunks = chunks;
+	};
+
+	var subObject = { 
+		next: next,
+		error: error,
+		complete: complete
+	};
+	// 调用sdk上传接口获得相应的observable,控制上传和暂停
+	var layerConfig = {
+		useCdnDomain: true,
+		disableStatisticsReport: false,
+		retryCount: 6
+    };
+    var putExtra = {
+		fname: "",
+		params: {"x:name":name},
+		mimeType: null
+    };
+	observable = qiniu.upload(file, filename, token, putExtra, layerConfig);
+	subscription = observable.subscribe(subObject);
 }
 
 function loadUpload(i,e,key,url,assets)

File diff suppressed because it is too large
+ 4 - 0
assets/lib/oss/aliyun-oss-sdk-6.11.2.min.js


Some files were not shown because too many files changed in this diff