智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
LightingSystemApp-serial/.svn/pristine/ba/ba2f93d8864466d0c53b9bbbd58...

117 lines
2.5 KiB

3 years ago
import {
hasOwn
} from 'uni-shared'
import {
getRealPath
} from '../util'
import {
publish
} from '../../bridge'
let uploadTaskId = 0
const uploadTasks = {}
const publishStateChange = (res) => {
publish('onUploadTaskStateChange', res)
}
const createUploadTaskById = function (uploadTaskId, {
url,
filePath,
name,
files,
header,
formData
} = {}) {
const uploader = plus.uploader.createUpload(url, {
timeout: __uniConfig.networkTimeout.uploadFile ? __uniConfig.networkTimeout.uploadFile / 1000 : 120,
// 需要与其它平台上的表现保持一致,不走重试的逻辑。
retry: 0,
retryInterval: 0
}, (upload, statusCode) => {
if (statusCode) {
publishStateChange({
uploadTaskId,
state: 'success',
data: upload.responseText,
statusCode
})
} else {
publishStateChange({
uploadTaskId,
state: 'fail',
data: '',
statusCode
})
}
delete uploadTasks[uploadTaskId]
})
for (const name in header) {
if (hasOwn(header, name)) {
uploader.setRequestHeader(name, header[name])
}
}
for (const name in formData) {
if (hasOwn(formData, name)) {
uploader.addData(name, String(formData[name]))
}
}
if (files && files.length) {
files.forEach(file => {
uploader.addFile(getRealPath(file.uri), {
key: file.name || 'file'
})
})
} else {
uploader.addFile(getRealPath(filePath), {
key: name
})
}
uploader.addEventListener('statechanged', (upload, status) => {
if (upload.uploadedSize && upload.totalSize) {
publishStateChange({
uploadTaskId,
state: 'progressUpdate',
progress: parseInt(upload.uploadedSize / upload.totalSize * 100),
totalBytesSent: upload.uploadedSize,
totalBytesExpectedToSend: upload.totalSize
})
}
})
uploadTasks[uploadTaskId] = uploader
uploader.start()
return {
uploadTaskId,
errMsg: 'createUploadTask:ok'
}
}
export function operateUploadTask ({
uploadTaskId,
operationType
} = {}) {
const uploadTask = uploadTasks[uploadTaskId]
if (uploadTask && operationType === 'abort') {
delete uploadTasks[uploadTaskId]
uploadTask.abort()
publishStateChange({
uploadTaskId,
state: 'fail',
errMsg: 'abort'
})
return {
errMsg: 'operateUploadTask:ok'
}
}
return {
errMsg: 'operateUploadTask:fail'
}
}
export function createUploadTask (args) {
return createUploadTaskById(++uploadTaskId, args)
}