You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
46 lines
1.2 KiB
4 weeks ago
|
/* eslint-disable no-use-before-define */
|
||
|
const { checkBucketName: _checkBucketName } = require('../utils/checkBucketName');
|
||
|
const querystring = require('querystring');
|
||
|
const {
|
||
|
Base64: { encode: str2Base64 }
|
||
|
} = require('js-base64');
|
||
|
|
||
|
const proto = exports;
|
||
|
|
||
|
proto.processObjectSave = async function processObjectSave(sourceObject, targetObject, process, targetBucket) {
|
||
|
checkArgs(sourceObject, 'sourceObject');
|
||
|
checkArgs(targetObject, 'targetObject');
|
||
|
checkArgs(process, 'process');
|
||
|
targetObject = this._objectName(targetObject);
|
||
|
if (targetBucket) {
|
||
|
_checkBucketName(targetBucket);
|
||
|
}
|
||
|
|
||
|
const params = this._objectRequestParams('POST', sourceObject, {
|
||
|
subres: 'x-oss-process'
|
||
|
});
|
||
|
|
||
|
const bucketParam = targetBucket ? `,b_${str2Base64(targetBucket)}` : '';
|
||
|
targetObject = str2Base64(targetObject);
|
||
|
|
||
|
const content = {
|
||
|
'x-oss-process': `${process}|sys/saveas,o_${targetObject}${bucketParam}`
|
||
|
};
|
||
|
params.content = querystring.stringify(content);
|
||
|
|
||
|
const result = await this.request(params);
|
||
|
return {
|
||
|
res: result.res,
|
||
|
status: result.res.status
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function checkArgs(name, key) {
|
||
|
if (!name) {
|
||
|
throw new Error(`${key} is required`);
|
||
|
}
|
||
|
if (typeof name !== 'string') {
|
||
|
throw new Error(`${key} must be String`);
|
||
|
}
|
||
|
}
|