func-aliyun-oss.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const argv = require('yargs').argv
  2. /**
  3. * @desc
  4. curl -X POST -H "Content-Type: application/json" -H 'X-Parse-Application-Id: edu-textbook' http://8.140.98.43/parse/functions/aliOssSTS
  5. *
  6. */
  7. export function defineAliOssSTS(){
  8. // function defineAuthingLogin(){
  9. Parse.Cloud.define("aliOssSTS", async (request) => {
  10. let result = await getAliyunOssAccessToken()
  11. return result
  12. });
  13. }
  14. // 公开OSS
  15. // 用户登录名称 mailto:hep-textbook-api@cloudhep.onaliyun.com
  16. // Bucket: hep-textbook
  17. // 内网地址:http://oss-cn-beijing.aliyuncs.com/
  18. // 外网地址:oss-cn-beijing-internal.aliyuncs.com
  19. const ALI_OSS_BUCKET = process.env.ALI_OSS_BUCKET || "hep-textbook"
  20. const ALI_OSS_ACCESS_KEY_ID = process.env.ALI_OSS_ACCESS_KEY_ID || "LTAI5t6AbTiAvXmeoVdJZhL3"
  21. const ALI_OSS_ACCESS_KEY_SECRET = process.env.ALI_OSS_ACCESS_KEY_SECRET || "KLtQRdIW69KLP7jnzHNUf7eKmdptxH"
  22. // 私有OSS
  23. // ---oss---
  24. const ALI_OSS_BUCKET_SECRET = process.env.ALI_OSS_BUCKET || "hep-textbook"
  25. // AccessKey ID: LTAI5t6AbTiAvXmeoVdJZhL3
  26. // AccessKey Secret: KLtQRdIW69KLP7jnzHNUf7eKmdptxH
  27. // 通过STS服务生成临时访问凭证。临时访问凭证包括临时访问密钥(AccessKeyId和AccessKeySecret)和安全令牌(SecurityToken)。
  28. const { STS } = require('ali-oss');
  29. const OSS = require("ali-oss");
  30. const sts = new STS({
  31. // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量ALI_OSS_ACCESS_KEY_ID和ALI_OSS_ACCESS_KEY_SECRET。
  32. accessKeyId: ALI_OSS_ACCESS_KEY_ID,
  33. accessKeySecret: ALI_OSS_ACCESS_KEY_SECRET
  34. });
  35. const ossClient = new OSS({
  36. // yourRegion填写Bucket所在地域。以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。
  37. region: "oss-cn-beijing",
  38. // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
  39. accessKeyId: ALI_OSS_ACCESS_KEY_ID,
  40. accessKeySecret: ALI_OSS_ACCESS_KEY_SECRET,
  41. // 填写Bucket名称。
  42. bucket: ALI_OSS_BUCKET || "hep-textbook",
  43. timeout:5000*1000
  44. });
  45. function getAliyunOssAccessToken(){
  46. // roleArn填写角色ARN。
  47. // policy填写自定义权限策略。
  48. // expiration用于设置临时访问凭证有效时间单位为秒,最小值为900,最大值以当前角色设定的最大会话时间为准。
  49. // sessionName用于自定义角色会话名称,用来区分不同的令牌,例如填写为SessionTest。
  50. // let result = await sts.assumeRole('acs:ram::137918634953****:role/ossram', `{
  51. // "Version": "1",
  52. // "Statement": [
  53. // {
  54. // "Effect": "Allow",
  55. // "Action": [
  56. // "oss:*"
  57. // ],
  58. // "Resource": [
  59. // "acs:oss:*:*:${ALI_OSS_BUCKET}",
  60. // "acs:oss:*:*:${ALI_OSS_BUCKET}/*"
  61. // ]
  62. // }
  63. // ]
  64. // }`, '3600', 'SessionTest' )
  65. // return result.credentials
  66. return {
  67. bucket: ALI_OSS_BUCKET,
  68. AccessKeyId: ALI_OSS_ACCESS_KEY_ID,
  69. AccessKeySecret:ALI_OSS_ACCESS_KEY_SECRET,
  70. SecurityToken: null,
  71. Expiration: null
  72. }
  73. // AccessKeyId: result.credentials.AccessKeyId,
  74. // AccessKeySecret: result.credentials.AccessKeySecret,
  75. // SecurityToken: result.credentials.SecurityToken,
  76. // Expiration: result.credentials.Expiration
  77. }
  78. module.exports.getAliyunOssAccessToken = getAliyunOssAccessToken
  79. if(argv?.test){
  80. getAliyunOssAccessToken()
  81. }
  82. // 获取临时签名地址
  83. async function signatureUrl(url,options){
  84. let expires = options?.expires || 600 // 默认10分钟
  85. let urlObj = new URL(url)
  86. let fileKey = decodeURIComponent(urlObj.pathname)
  87. // let r1 = await this.client?.get(fname, file, putOptions);
  88. let r1 = await ossClient?.signatureUrl(fileKey, {
  89. expires: expires,
  90. });
  91. console.log(r1)
  92. return r1;
  93. }
  94. module.exports.signatureUrl = signatureUrl