服务端签名后直传
https://help.aliyun.com/document_detail/31926.html?spm=5176.product31815.6.614.HI0PNh
图片使用
https://help.aliyun.com/document_detail/44688.html?spm=5176.doc44686.6.924.t5CtYr
java后台签名
package wrules; import java.io.IOException; import java.sql.Date; import java.util.LinkedHashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.utils.BinaryUtil; import com.aliyun.oss.model.MatchMode; import com.aliyun.oss.model.PolicyConditions; @WebServlet(asyncSupported = true) public class PostObjectPolicy extends HttpServlet{ /** * */ private static final long serialVersionUID = 5522372203700422672L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String endpoint = "oss-cn-beijing.aliyuncs.com/"; String accessId = "修改"; String accessKey = "修改"; String bucket = "修改"; String dir = "user-dir"; if(null!= request.getParameter("dir")){ dir = request.getParameter("dir"); } String host = "http://" + bucket + "." + endpoint; OSSClient client = new OSSClient(endpoint, accessId, accessKey); try { 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("expire", formatISO8601Date(expiration)); respMap.put("dir", dir); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); JSONObject ja1 = new JSONObject(respMap); System.out.println(ja1.toString()); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST"); response(request, response, ja1.toString()); } catch (Exception e) { e.printStackTrace(); } } private void response(HttpServletRequest request, HttpServletResponse response, String results) throws IOException { String callbackFunName = request.getParameter("callback"); if (callbackFunName==null || callbackFunName.equalsIgnoreCase("")) response.getWriter().println(results); else response.getWriter().println(callbackFunName + "( "+results+" )"); response.setStatus(HttpServletResponse.SC_OK); response.flushBuffer(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
javascript全局参数
var objdata = { upfile_endpoint:'http://修改.oss-cn-beijing.aliyuncs.com',//上传地址 upfile_nametype:'random_name',//local_name random_name 上传文件的文件名类型 upfile_defaltdir:'upload/CCCC'//上传路径 多层 格式 upload/floder1/floder2 };
uploader.on('uploadBeforeSend', function (obj, data, headers) { //TODO 如果同一个页面上传多次 需要处理签名逻辑 不用每次都签名 $.ajax({ type : "post", url : "osssignuature", timeout : 10000, data : { "dir" : objdata.upfile_defaltdir }, success : function(str) { if (str) { try { var re = JSON.parse(str); objdata.os ssignature = { 'key' : re.dir, 'policy': re.policy, 'OSSAccessKeyId': re.accessid, 'success_action_status' : '200', //让服务端返回200,不然,默认会返回204 'signature': re.signature }; } catch (e) { alert("系统错误"); } } else { alert("结果为空"); } }, error : function(XMLHttpRequest, textStatus, errorThrown) { alert("ajax error"); }, complete : function(XMLHttpRequest,status){ //请求完成后最终执行参数 if(status == 'timeout'){ alert('请求超时,请稍后再试!'); } }, async : false }); //赋值参数 data = $.extend(data,objdata.osssignature); //设置文件路径 data.key = data.key + "/" + calculate_object_name(data.name,objdata.upfile_nametype); obj.filepath = data.key; file.path = data.key; headers['Access-Control-Allow-Origin'] = "*"; });
上传完效果
源码下载地址
http://download.csdn.net/detail/qinghechaoge/9712694
相关推荐
总结来说,使用Java版的百度WebUploader上传文件到阿里OSS,需要理解WebUploader的前端交互机制、Java服务端的签名生成以及阿里OSS的上传策略。通过这些技术的结合,可以实现高效、安全的文件上传服务。在实际应用中...
“阿里云OSS对象云存储上传控件仿百度webuploader插件”是针对阿里云OSS服务的一款上传组件,它的设计灵感来源于百度的WebUploader插件。WebUploader是一款优秀的前端文件上传插件,具有多文件选择、断点续传、文件...
`ossUploader` 是一个针对阿里云OSS的上传控件,其设计灵感来源于百度的`webuploader`插件,旨在简化文件上传至阿里云OSS的过程,为Web应用提供便捷的文件上传功能。 `ossUploader`主要包含以下关键知识点: 1. **...
而ossUploader则是基于此服务开发的一个前端页面Demo,其仿制了百度webuploader插件,为开发者提供了一个可视化的上传界面。 ossUploader的核心功能是允许用户通过前端页面直接与阿里云OSS进行交互,实现文件上传、...
WebUploader是百度推出的一款强大的前端文件上传组件,支持断点续传、多文件上传、大文件分片上传等功能。 首先,WebUploader插件依赖jQuery库,因此在使用前确保引入的jQuery版本大于1.9。在HTML页面中,我们需要...
在本文中,我们将深入探讨如何实现一个基于WebUploader和Express的图片上传系统,该系统允许用户通过前端百度图片上传插件将图片发送到后端服务器,服务器处理并返回图片URL,以便在前端显示。让我们逐步解析这个...