upload.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { aliyunpolicy } from "@/utils/upload";
  2. export function uploadFile(rules) {
  3. return new Promise((resolve, reject) => {
  4. uni.chooseImage({
  5. count: 1,
  6. sizeType: ["compressed"],
  7. sourceType: ["album", "camera"], //从相册选择
  8. success: (chooseImageRes) => {
  9. const tempFilePaths = chooseImageRes.tempFilePaths[0];
  10. if (rules && !rules(tempFilePaths)) {
  11. return;
  12. }
  13. aliyunpolicy({ imageStatus: 6 }).then((res) => {
  14. let ossToken = res.resultContent;
  15. uni.uploadFile({
  16. url: ossToken.host,
  17. name: "file",
  18. filePath: tempFilePaths,
  19. fileType: "image",
  20. header: {
  21. AuthorizationToken: "WX " + uni.getStorageSync("token"),
  22. },
  23. formData: {
  24. key: ossToken.dir,
  25. OSSAccessKeyId: ossToken.accessid,
  26. policy: ossToken.policy,
  27. Signature: ossToken.signature,
  28. success_action_status: 200,
  29. },
  30. success: (result) => {
  31. resolve(ossToken.dir);
  32. },
  33. fail: (error) => {
  34. uni.showToast({
  35. title: "上传报错",
  36. icon: "none",
  37. });
  38. return;
  39. },
  40. });
  41. });
  42. },
  43. });
  44. });
  45. }
  46. // 下载
  47. export function downloadFile(url, fileName) {
  48. const a = document.createElement("a");
  49. a.setAttribute("href", url)
  50. a.setAttribute("download", fileName)
  51. a.setAttribute("target", "_blank")
  52. let clickEvent = document.createEvent("MouseEvents");
  53. clickEvent.initEvent("click", true, true);
  54. a.dispatchEvent(clickEvent);
  55. }
  56. export function base64ToPath(base64) {
  57. return new Promise(function(resolve, reject) {
  58. if (typeof window === 'object' && 'document' in window) {
  59. base64 = base64.split(',')
  60. var type = base64[0].match(/:(.*?);/)[1]
  61. var str = atob(base64[1])
  62. var n = str.length
  63. var array = new Uint8Array(n)
  64. while (n--) {
  65. array[n] = str.charCodeAt(n)
  66. }
  67. return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
  68. }
  69. var extName = base64.match(/data\:\S+\/(\S+);/)
  70. if (extName) {
  71. extName = extName[1]
  72. } else {
  73. reject(new Error('base64 error'))
  74. }
  75. var fileName = Date.now() + '.' + extName
  76. if (typeof plus === 'object') {
  77. var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
  78. bitmap.loadBase64Data(base64, function() {
  79. var filePath = '_doc/uniapp_temp/' + fileName
  80. bitmap.save(filePath, {}, function() {
  81. bitmap.clear()
  82. resolve(filePath)
  83. }, function(error) {
  84. bitmap.clear()
  85. reject(error)
  86. })
  87. }, function(error) {
  88. bitmap.clear()
  89. reject(error)
  90. })
  91. return
  92. }
  93. if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
  94. var filePath = wx.env.USER_DATA_PATH + '/' + fileName
  95. wx.getFileSystemManager().writeFile({
  96. filePath: filePath,
  97. data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
  98. encoding: 'base64',
  99. success: function() {
  100. resolve(filePath)
  101. },
  102. fail: function(error) {
  103. reject(error)
  104. }
  105. })
  106. return
  107. }
  108. reject(new Error('not support'))
  109. })
  110. }