CodeSample小助手 2019-12-30
本示例采用Plupload直接提交表单数据(即PostObject)到OSS,可以运行于PC浏览器、手机浏览器、微信等。您可以同时选择多个文件上传,并设置上传到指定目录和设置上传文件名称是随机文件名还是本地文件名。您还可以通过进度条查看上传进度。
accessid= '<yourAccessKeyId>';
accesskey= <yourAccessKeySecrety>';
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com
.....
new_multipart_params = {
....
'OSSAccessKeyId': accessid,
....
};
//如果是STS方式====
accessid = 'STS.ACCESSKEYID';
accesskey = 'STS.ACCESSSECRET';
token = 'STS.token';
.....
new_multipart_params = {
....
'OSSAccessKeyId': accessid,
'x-oss-security-token':token
....
};
//===========
host = 'http://post-test.oss-cn-hangzhou.aliyuncs.com';
BucketName.Endpoint
,例如post-test.oss-cn-hangzhou.aliyuncs.com
。 关于OSS访问域名的介绍请参见OSS访问域名使用规则。 客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin
的请求消息。OSS对带有Origin
头的请求消息会进行跨域规则(CORS)的验证,因此需要为Bucket设置跨域规则以支持Post方法。
因为OSS支持POST协议,所以只要在Plupload发送POST请求时带上OSS签名即可。核心代码如下:
function set_upload_param(up, filename, ret)
{
g_object_name = g_dirname;
if (filename != '') {
suffix = get_suffix(filename)
calculate_object_name(filename)
}
new_multipart_params = {
'key' : g_object_name,
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
'signature': signature,
};
up.setOption({
'url': host,
'multipart_params': new_multipart_params
});
up.start();
}
....
上述代码中,’key’: g_object_name
表示上传后的文件路径。若您希望上传后保持原来的文件名,请将该字段改为’key’: '${filename}'
。
如果您希望上传到特定目录,例如abc下,且文件名不变,请修改代码如下:
new_multipart_params = {
'key' : 'abc/' + '${filename}',
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
'signature': signature,
};
如果想在上传时固定设置成随机文件名,后缀保持跟客户端文件一致,可以将函数改为:
function check_object_radio() {
g_object_name_type = 'random_name';
}
如果想在上传时固定设置成用户的文件名,可以将函数改为:
function check_object_radio() {
g_object_name_type = 'local_name';
}
您可以将文件上传到指定目录下。下面的代码是将上传目录改成abc/,注意目录必须以正斜线(/)结尾。
function get_dirname()
{
g_dirname = "abc/";
}
上传签名主要是对policyText进行签名,最简单的例子如下:
var policyText = {
"expiration": "2020-01-01T12:00:00.000Z", // 设置Policy的失效时间,如果超过失效时间,就无法通过此Policy上传文件
"conditions": [
["content-length-range", 0, 1048576000] // 设置上传文件的大小限制,如果超过限制,文件上传到OSS会报错
]
}
您可以利用Plupload的属性filters设置上传的过滤条件,如设置只能上传图片类型的文件、上传文件的大小、不能有重复上传等。详细代码请参见服务端签名直传并设置上传回调—客户端源码解析中的“设置上传过滤条件”。
您可以根据Bucket访问域名及文件访问路径获取文件的URL,详情请参见上传Object后如何获取访问URL?。
如果您还有更多问题,请提交工单,会有专业的云计算工程师为您尽快解答。