qiniu.service.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // 七牛云服务模块 - ESM 格式
  2. import qiniu from "qiniu";
  3. /**
  4. * 生成七牛云上传凭证
  5. * @param {Object} qiniuData - 七牛云配置信息
  6. * @param {string} qiniuData.ak - AccessKey
  7. * @param {string} qiniuData.sk - SecretKey
  8. * @param {string} qiniuData.bucket - 存储空间名称
  9. * @param {string} qiniuData.domain - 访问域名
  10. * @param {string} qiniuData.zoneUrl - 上传区域地址
  11. * @param {string} qiniuData.zone - 存储区域(如 z2)
  12. * @param {number} qiniuData.max_file_size - 最大文件大小(MB)
  13. * @returns {Promise<Object>} 返回上传凭证信息
  14. */
  15. export function qiniuUptoken(qiniuData) {
  16. return new Promise((resolve) => {
  17. const accessKey = qiniuData.ak;
  18. const secretKey = qiniuData.sk;
  19. const max_file_size = qiniuData.max_file_size || 400;
  20. const options = {
  21. scope: qiniuData.bucket // scope = <bucket>:<key>,key可省略
  22. };
  23. const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
  24. const config = new qiniu.conf.Config();
  25. // 设置空间对应的机房
  26. if (qiniuData.zone === "z2") {
  27. config.zone = qiniu.zone.Zone_z2;
  28. }
  29. // 参考文档: http://developer.qiniu.com/article/developer/security/put-policy.html
  30. const putPolicy = new qiniu.rs.PutPolicy(options);
  31. // putPolicy.expires = "3600" // 默认token一小时内生效
  32. // putPolicy.mimeLimit = "image/*" // image/*表示只允许上传图片类型
  33. resolve({
  34. uptoken: putPolicy.uploadToken(mac),
  35. domain: qiniuData.domain,
  36. zoneUrl: qiniuData.zoneUrl,
  37. max_file_size: max_file_size
  38. });
  39. });
  40. }