txOssSts.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * 微信小程序通过STS直传阿里云OSS
  3. *(uniapp版上传,小程序原生需要将uni.XXX替换为wx.XXX)
  4. *
  5. * @param {filePath} 图片临时地址
  6. * @param {option|Object} OSS和STS配置
  7. * @param {savePath} oss中的文件目录
  8. * @param {AccessKeySecret} 服务端返回的STS中的AccessKeySecret
  9. * @param {SecurityToken} 服务端返回的STS中的SecurityToken
  10. * @param {AccessKeyId} 服务端返回的STS中的AccessKeyId
  11. * @param {bucket} 存储桶
  12. * @param {area} 地区
  13. * @return {string|boolean} 成功返回文件地址,失败返回false
  14. */
  15. import COS from "./cos-wx-sdk-v5.min"
  16. console.log(COS)
  17. import tools from "./tools";
  18. import {getTxySts} from "@/api/common";
  19. // 存储桶名称,由bucketname-appid 组成,appid必须填入,可以在COS控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
  20. let Bucket = 'icoco-1317650740';
  21. // 存储桶Region可以在COS控制台指定存储桶的概览页查看 https://console.cloud.tencent.com/cos5/bucket/
  22. // 关于地域的详情见 https://cloud.tencent.com/document/product/436/6224
  23. let Region = 'ap-guangzhou';
  24. let cos=null;
  25. function startCos(){
  26. cos = new COS({
  27. getAuthorization: function (options, callback) {
  28. console.log('---------------获取初始化信息')
  29. getTxySts().then((res)=>{
  30. if(res.code===0){
  31. callback({
  32. TmpSecretId: res.data.credentials.tmpSecretId,
  33. TmpSecretKey: res.data.credentials.tmpSecretKey,
  34. XCosSecurityToken: res.data.credentials.sessionToken,
  35. StartTime: res.data.startTime, // 时间戳,单位秒,如:1580000000,建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
  36. ExpiredTime: res.data.expiredTime, // 时间戳,单位秒,如:1580000900
  37. })
  38. }
  39. })
  40. }
  41. });
  42. }
  43. /**
  44. * COS文件上传
  45. * @param file
  46. * @param folder 上传目录
  47. * @returns {Promise<unknown>}
  48. */
  49. function txUploadFile(file,folder){
  50. if(cos===null){
  51. console.log('对象初始化')
  52. //初始化对象
  53. startCos();
  54. }
  55. //默认为个人目录gallery
  56. folder=folder==='moment'?'moment':'gallery'
  57. tools.showLoading()
  58. return new Promise((resolve, reject) => {
  59. console.log('cos-*-------------------------',cos)
  60. console.log(file)
  61. console.log(folder+'/'+tools.getDate()+tools.getRandFileName(file))
  62. // 分片上传文件
  63. cos.postObject({
  64. Bucket: Bucket,
  65. Region: Region,
  66. Key: folder+'/'+tools.getDate()+'/'+tools.getRandFileName(file),
  67. FilePath: file,
  68. onHashProgress: function (progressData) {
  69. console.log('校验中', JSON.stringify(progressData));
  70. },
  71. onProgress: function (progressData) {
  72. console.log('上传中', JSON.stringify(progressData));
  73. },
  74. }, function (err, data) {
  75. tools.hideLoading()
  76. console.log(err, data);
  77. if(data.Location!==undefined){
  78. data.Location='https://'+data.Location;
  79. resolve( data)
  80. }else {
  81. resolve( false)
  82. }
  83. });
  84. })
  85. }
  86. export default txUploadFile