oss文件上传实现纯前端上传下载
oss文件上传实现纯前端上传
优点:不占用服务器资源,大幅度提升上传下载速度 话不多说!直接码上!
oss上传 *前端:*WebUploader上传组件 与后台交互获取oss上传相关秘钥并上传
$scope.uploader = uploader = WebUploader.create({ // 自动上传。 auto : true, // swf文件路径 swf : webuploader/Uploader.swf, // 文件接收服务端。 server : http://XXX.oss-cn-XXXX.aliyuncs.com, // 选择文件的按钮。可选。 accept: { extensions: "pdf", mimeTypes: ".pdf" }, // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick : #picker, // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize : false }); uploader.on(uploadBeforeSend, function (file, data, headers) { $.ajax({ type : "POST", url : __ctx + getA, timeout : 10000, dataType:"JSON", data:data, success : function(obj2) { data = $.extend(data,{ key : obj2.dir,//这里最好在后台处理好 policy: obj2.policy, OSSAccessKeyId: obj2.accessid, success_action_status : 200, //让服务端返回200,不然,默认会返回204 //callback : obj2.callback, signature: obj2.signature, }); error : function(XMLHttpRequest, textStatus, errorThrown) { $scope.$apply(function() { toastr.error("上传失败"); uploader.removeFile(file, true); }); }, async : false }); headers[Access-Control-Allow-Origin] = "*"; });
后台:
public Map<String, String> getA() throws IOException { String path= ""; // String accessId = ""; // 请填写您的AccessKeyId。 String accessKey = ""; // 请填写您的AccessKeySecret。 String endpoint = ""; // 请填写您的 endpoint。 String bucket = ""; // 请填写您的 bucketname 。 String host = "http://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。 String callbackUrl = "http://88.88.88.88.:8888"; String dir = ""; // 用户上传文件时指定的前缀。 OSSClient client = new OSSClient(endpoint, accessId, accessKey); long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); String postPolicy = client.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = client.calculatePostSignature(postPolicy); Map<String, String> respMap = new LinkedHashMap<String, String>(); respMap.put("accessid", accessId); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", path); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); return respMap; }