Blame view

antis-ncc-admin/src/utils/oss-upload.js 1.8 KB
7606a6ad   “wangming”   fix: update produ...
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
48
49
50
51
52
53
54
  import { getUploadCredential, confirmUpload } from '@/api/extend/ossUpload'
  import { appendOssImageThumb } from '@/utils/oss-image-thumb'
  
  /**
   * OSS 直传文件
   * @param {File} file - File 对象
   * @param {string} type - 上传类型,默认 annexpic
   * @returns {Promise<{name: string, fileId: string, url: string, objectKey: string}>}
   */
  export function ossUploadFile(file, type = 'annexpic') {
    return getUploadCredential(type).then(res => {
      var credential = res.data
      var ext = ''
      var dotIndex = file.name.lastIndexOf('.')
      if (dotIndex > -1) {
        ext = file.name.substring(dotIndex)
      }
      var objectKey = credential.objectKeyPrefix + credential.fileId + ext
  
      return new Promise(function(resolve, reject) {
        var 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)
  
        var xhr = new XMLHttpRequest()
        xhr.open('POST', credential.host, true)
        xhr.onload = function() {
          if (xhr.status === 200) {
            confirmUpload({
              objectKey: objectKey,
              originalFileName: file.name,
              type: type
            }).then(function(confirmRes) {
              var d = confirmRes.data
              if (d && d.url && !d.thumbnailUrl) {
                d.thumbnailUrl = appendOssImageThumb(d.url)
              }
              resolve(d)
            }).catch(reject)
          } else {
            reject(new Error('OSS 上传失败,状态码:' + xhr.status))
          }
        }
        xhr.onerror = function() {
          reject(new Error('OSS 上传网络错误'))
        }
        xhr.send(formData)
      })
    })
  }