processObjectSave.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /* eslint-disable no-use-before-define */
  2. const { checkBucketName: _checkBucketName } = require('../utils/checkBucketName');
  3. const querystring = require('querystring');
  4. const { Base64: { encode: str2Base64 } } = require('js-base64');
  5. const proto = exports;
  6. proto.processObjectSave = async function processObjectSave(sourceObject, targetObject, process, targetBucket) {
  7. checkArgs(sourceObject, 'sourceObject');
  8. checkArgs(targetObject, 'targetObject');
  9. checkArgs(process, 'process');
  10. targetObject = this._objectName(targetObject);
  11. if (targetBucket) {
  12. _checkBucketName(targetBucket);
  13. }
  14. const params = this._objectRequestParams('POST', sourceObject, {
  15. subres: 'x-oss-process'
  16. });
  17. const bucketParam = targetBucket ? `,b_${str2Base64(targetBucket)}` : '';
  18. targetObject = str2Base64(targetObject);
  19. const content = {
  20. 'x-oss-process': `${process}|sys/saveas,o_${targetObject}${bucketParam}`
  21. };
  22. params.content = querystring.stringify(content);
  23. const result = await this.request(params);
  24. return {
  25. res: result.res,
  26. status: result.res.status
  27. };
  28. };
  29. function checkArgs(name, key) {
  30. if (!name) {
  31. throw new Error(`${key} is required`);
  32. }
  33. if (typeof name !== 'string') {
  34. throw new Error(`${key} must be String`);
  35. }
  36. }