forked from dcloudio/uni-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: uni-easyinput 优化 兼容nvue页面 fix: uni-group 优化 兼容nvue页面 feat: uni-file-picker 新增 文件选择上传组件
- Loading branch information
Showing
30 changed files
with
2,207 additions
and
140 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
'use strict'; | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
const ERR_MSG_OK = 'chooseAndUploadFile:ok'; | ||
const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; | ||
function chooseImage(opts) { | ||
const { count, sizeType, sourceType, extension } = opts; | ||
return new Promise((resolve, reject) => { | ||
uni.chooseImage({ | ||
count, | ||
sizeType, | ||
sourceType, | ||
extension, | ||
success(res) { | ||
resolve(normalizeChooseAndUploadFileRes(res, 'image')); | ||
}, | ||
fail(res) { | ||
reject({ | ||
errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), | ||
}); | ||
}, | ||
}); | ||
}); | ||
} | ||
function chooseVideo(opts) { | ||
const { camera, compressed, maxDuration, sourceType, extension } = opts; | ||
return new Promise((resolve, reject) => { | ||
uni.chooseVideo({ | ||
camera, | ||
compressed, | ||
maxDuration, | ||
sourceType, | ||
extension, | ||
success(res) { | ||
const { tempFilePath, duration, size, height, width } = res; | ||
resolve(normalizeChooseAndUploadFileRes({ | ||
errMsg: 'chooseVideo:ok', | ||
tempFilePaths: [tempFilePath], | ||
tempFiles: [ | ||
{ | ||
name: (res.tempFile && res.tempFile.name) || '', | ||
path: tempFilePath, | ||
size, | ||
type: (res.tempFile && res.tempFile.type) || '', | ||
width, | ||
height, | ||
duration, | ||
fileType: 'video', | ||
cloudPath: '', | ||
}, | ||
], | ||
}, 'video')); | ||
}, | ||
fail(res) { | ||
reject({ | ||
errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), | ||
}); | ||
}, | ||
}); | ||
}); | ||
} | ||
function chooseAll(opts) { | ||
const { count, extension } = opts; | ||
return new Promise((resolve, reject) => { | ||
let chooseFile = uni.chooseFile; | ||
if (typeof wx !== 'undefined' && | ||
typeof wx.chooseMessageFile === 'function') { | ||
chooseFile = wx.chooseMessageFile; | ||
} | ||
if (typeof chooseFile !== 'function') { | ||
return reject({ | ||
errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', | ||
}); | ||
} | ||
chooseFile({ | ||
type: 'all', | ||
count, | ||
extension, | ||
success(res) { | ||
resolve(normalizeChooseAndUploadFileRes(res)); | ||
}, | ||
fail(res) { | ||
reject({ | ||
errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), | ||
}); | ||
}, | ||
}); | ||
}); | ||
} | ||
function normalizeChooseAndUploadFileRes(res, fileType) { | ||
res.tempFiles.forEach((item, index) => { | ||
if (!item.name) { | ||
item.name = item.path.substring(item.path.lastIndexOf('/') + 1); | ||
} | ||
if (fileType) { | ||
item.fileType = fileType; | ||
} | ||
item.cloudPath = | ||
Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); | ||
}); | ||
// wx.chooseMessageFile | ||
if (!res.tempFilePaths) { | ||
res.tempFilePaths = res.tempFiles.map((file) => file.path); | ||
} | ||
return res; | ||
} | ||
function uploadCloudFiles(res, max = 5, onUploadProgress) { | ||
res = Object.assign({}, res); | ||
res.errMsg = ERR_MSG_OK; | ||
const files = res.tempFiles; | ||
const len = files.length; | ||
let count = 0; | ||
return new Promise((resolve) => { | ||
while (count < max) { | ||
next(); | ||
} | ||
function next() { | ||
let cur = count++; | ||
if (cur >= len) { | ||
!files.find((item) => !item.url && !item.errMsg) && resolve(res); | ||
return; | ||
} | ||
const fileItem = files[cur]; | ||
uniCloud | ||
.uploadFile({ | ||
filePath: fileItem.path, | ||
cloudPath: fileItem.cloudPath, | ||
fileType: fileItem.fileType, | ||
onUploadProgress(res) { | ||
res.index = cur; | ||
res.tempFile = fileItem; | ||
res.tempFilePath = fileItem.path; | ||
onUploadProgress && | ||
onUploadProgress(res); | ||
}, | ||
}) | ||
.then((res) => { | ||
fileItem.url = res.fileID; | ||
if (cur < len) { | ||
next(); | ||
} | ||
}) | ||
.catch((res) => { | ||
// fileItem.errMsg = res.message; | ||
fileItem.errMsg = res.errMsg || res.message; | ||
if (cur < len) { | ||
next(); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
function uploadFiles(choosePromise, { onChooseFile, onUploadProgress }) { | ||
return choosePromise | ||
.then((res) => { | ||
if (onChooseFile) { | ||
const customChooseRes = onChooseFile(res); | ||
if (typeof customChooseRes !== 'undefined') { | ||
return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? res : chooseRes); | ||
} | ||
} | ||
return res; | ||
}) | ||
.then((res) => { | ||
if (res === false) { | ||
return { | ||
errMsg: ERR_MSG_OK, | ||
tempFilePaths: [], | ||
tempFiles: [], | ||
}; | ||
} | ||
return uploadCloudFiles(res, 5, onUploadProgress); | ||
}); | ||
} | ||
function chooseAndUploadFile(opts = { type: 'all' }) { | ||
if (opts.type === 'image') { | ||
return uploadFiles(chooseImage(opts), opts); | ||
} | ||
else if (opts.type === 'video') { | ||
return uploadFiles(chooseVideo(opts), opts); | ||
} | ||
return uploadFiles(chooseAll(opts), opts); | ||
} | ||
|
||
exports.chooseAndUploadFile = chooseAndUploadFile; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
{ | ||
"id": "-1", | ||
"name": "Forms", | ||
"desc": "表单", | ||
"edition": "0.0.1", | ||
"url": "forms", | ||
"type": "表单组件", | ||
"suffix": "vue", | ||
"module": ["uni-file-picker"], | ||
"path": "https://ext.dcloud.net.cn/plugin?id=-1", | ||
"update_log": ["- 新增 uni-file-picker 文件上传组件"] | ||
} |
Oops, something went wrong.