暂无个人介绍
2022年01月
const uploadFile = function uploadFile(client) {
if (!uploadFileClient || Object.keys(uploadFileClient).length === 0) {
uploadFileClient = client;
}
const file = document.getElementById('file').files[0];
const key = document.getElementById('object-key-file').value.trim() || 'object';
console.log(`${file.name} => ${key}`);
const options = {
progress,
partSize: 500 * 1024,
timeout:60000,
meta: {
year: 2017,
people: 'test',
},
callback: {
//此处是添加上传回调的位置。
url: 'https://example.aliyundoc.com/v2/sync',
/* host: 'oss-cn-shenzhen.aliyuncs.com', */
/* eslint no-template-curly-in-string: [0] */
body: 'bucket=${bucket}&object=${object}&var1=${x:var1}',
contentType: 'application/x-www-form-urlencoded',
customValue: {
var1: 'value1',
var2: 'value2',
},
},
关于上传回调的更多信息,请参见原理介绍。
进入ali-oss/example执行 npm run start。
签名URL常用于授权给第三方进行资源的下载和上传操作。下载请参见上一条。SDK中提供signatureUrl API,用于返回一个经过签名的URL,用户直接使用该URL上传或者下载资源即可。利用签名URL上传资源请参见SDK工程示例签名URL上传资源示例。
在浏览器中可以根据document.getElementById(“file”).files[0].size获取上传文件的大小(字节数)。更多信息,请参见Web端直传实践的post请求。
base64先转码成指定格式图片,然后调用OSS上传接口进行上传。更多信息,请参见Github示例。
/**
* base64 to file
* @param dataurl base64 content
* @param filename set up a meaningful suffix, or you can set mime type in options
* @returns {File|*}
*/
const dataURLtoFile = function dataURLtoFile(dataurl, filename) {
const arr = dataurl.split(',');
const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });// if env support File, also can use this: return new File([u8arr], filename, { type: mime });
};
// client表示OSS client实例
const uploadBase64Img = function uploadBase64Img(client) {
// base64格式的内容
const base64Content = 'data:image:xxxxxxxxxxxxx';
const filename = 'img.png';
const imgfile = dataURLtoFile(base64Content, filename);
//key表示上传的object key ,imgFile表示dataURLtoFile处理后返回的图片
client.multipartUpload(key, imgfile).then((res) => {
console.log('upload success: %j', res);
}).catch((err) => {
console.error(err);
});
};
给要上传的Object名称前加指定目录前缀即可。更多信息,请参见OSS和文件系统对比。
let OSS = require('ali-oss')
let client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: 'Your bucket name'
});
client.multipartUpload('base-dir/' +'object-key', 'local-file', {
progress: async function (p) {
console.log('Progress: ' + p);
}
});
console.log(result);
}).catch((err) => {
console.log(err);
});
可以将checkpoint保存到浏览器的localstorage,下次再调用的时候传入checkpoint参数,就可以实现断点续传功能。
初始化SDK时,可传入以下几个参数:
region:指您申请OSS服务时的区域,例如oss-cn-hangzhou。完整的区域列表可以在OSS服务节点查看。
internal:配合region使用,如果指定 internal 为 true,则访问内网节点。
secure:配合region使用,如果指定了secure为true,则使用HTTPS访问。
const client = new OSS({
region,
accessKeyId: creds.AccessKeyId,
accessKeySecret: creds.AccessKeySecret,
stsToken: creds.SecurityToken,
bucket,
secure:true
});
浏览器是不受信任的环境,如果把AccessKey ID和AccessKey Secret直接保存在浏览器端,存在极高的风险。建议在浏览器环境下使用STS模式进行OSS接口调用。
获取STS token后,即可进行SDK初始化操作。
<script type="text/javascript">
$.ajax("http://your_sts_server/",{method: 'GET'},function (err, result) {
let client = new OSS({
accessKeyId: result.AccessKeyId,
accessKeySecret: result.AccessKeySecret,
stsToken: result.SecurityToken,
endpoint: '<oss endpoint>',
bucket: '<Your bucket name>'
});
});
</script>
可调用 signatureUrl 方法,获取下载地址,可查看 Github 中 signatureUrl部分。
给要上传的 object 名称前加指定目录前缀即可,可参考OSS 和文件系统对比。
let OSS = require('ali-oss')
let client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: '<Your bucket name>',
});
client.multipartUpload('base-dir/' +'object-name', 'local-file', {
progress: async function (p) {
console.log('Progress: ' + p);
}
});
console.log(result);
}).then((res) => {
console.log(res)
}). catch((err) => {
console.log(err);
});
将 base64 内容转换成 File 对象,再调用接口上传至 OSS 服务器。
function dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
}
let file = dataURLtoFile('<base64 content>', '');
client.multipartUpload('<oss file name>', file).then( (res)=> {
console.log(res)
}).catch((err) => {
console.log(err)
});
Node.js SDK 中可根据下载流的大小来计算进度。