oss-upload.js
1.58 KB
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)
})
})
}