import { fileToUrl } from 'uni-platform/helpers/file'
|
import { t } from 'uni-core/helpers/i18n'
|
import _createInput from './create_input'
|
import { interact } from 'uni-mixins'
|
|
const {
|
invokeCallbackHandler: invoke
|
} = UniServiceJSBridge
|
|
let imageInput = null
|
|
export function chooseImage ({
|
count,
|
// sizeType,
|
sourceType,
|
extension
|
}, callbackId) {
|
// TODO handle sizeType 尝试通过 canvas 压缩
|
|
if (imageInput) {
|
document.body.removeChild(imageInput)
|
imageInput = null
|
}
|
|
imageInput = _createInput({
|
count,
|
sourceType,
|
extension,
|
type: 'image'
|
})
|
document.body.appendChild(imageInput)
|
imageInput.addEventListener('change', function (event) {
|
const tempFiles = []
|
const fileCount = event.target.files.length
|
for (let i = 0; i < fileCount; i++) {
|
const file = event.target.files[i]
|
let filePath
|
Object.defineProperty(file, 'path', {
|
get () {
|
filePath = filePath || fileToUrl(file)
|
return filePath
|
}
|
})
|
if (i < count) tempFiles.push(file)
|
}
|
const res = {
|
errMsg: 'chooseImage:ok',
|
get tempFilePaths () {
|
return tempFiles.map(({ path }) => path)
|
},
|
tempFiles: tempFiles
|
}
|
invoke(callbackId, res)
|
|
// TODO 用户取消选择时,触发 fail,目前尚未找到合适的方法。
|
})
|
|
imageInput.click()
|
|
if (!interact.getStatus()) {
|
console.warn(`${t('uni.chooseFile.notUserActivation')}`)
|
}
|
}
|