Blame view

store-pc/src/utils/oss-upload.js 1.58 KB
b5df6609   “wangming”   ```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  import { getUploadCredential, confirmUpload } from '@/api/ossUpload'
  
  /**
   * OSS 直传(与小程序 / 管理端一致)
   * @param {File} file
   * @param {string} type annexpic | attendancepic 
   * @returns {Promise<{name:string,fileId:string,url:string,objectKey?:string,uploadRecordId?:string}>}
   */
  export function ossUploadFile(file, type = 'annexpic') {
    return getUploadCredential(type).then(res => {
      const credential = res.data
      let ext = ''
      const dotIndex = file.name.lastIndexOf('.')
      if (dotIndex > -1) {
        ext = file.name.substring(dotIndex)
      }
      const objectKey = credential.objectKeyPrefix + credential.fileId + ext
  
      return new Promise((resolve, reject) => {
        const formData = new FormData()
        formData.append('key', objectKey)
        formData.append('OSSAccessKeyId', credential.accessKeyId)
        formData.append('policy', credential.policy)
        formData.append('Signature', credential.signature)
        formData.append('success_action_status', '200')
        formData.append('file', file)
  
        const xhr = new XMLHttpRequest()
        xhr.open('POST', credential.host, true)
        xhr.onload = () => {
          if (xhr.status === 200) {
            confirmUpload({
              objectKey,
              originalFileName: file.name,
              type
            })
              .then(confirmRes => resolve(confirmRes.data))
              .catch(reject)
          } else {
            reject(new Error('OSS 上传失败,状态码:' + xhr.status))
          }
        }
        xhr.onerror = () => reject(new Error('OSS 上传网络错误'))
        xhr.send(formData)
      })
    })
  }