提交 e06a7021 编写于 作者: D DCloud_LXH

chore(App): chooseImage、chooseVideo optimize

上级 453b3fe2
import { TEMP_PATH } from '../constants' import { TEMP_PATH } from '../constants'
import { warpPlusErrorCallback } from '../../../helpers/plus' import { warpPlusErrorCallback } from '../../../helpers/plus'
import { getFileName } from '../../../helpers/file'
import { import {
API_TYPE_CHOOSE_IMAGE, API_TYPE_CHOOSE_IMAGE,
API_CHOOSE_IMAGE, API_CHOOSE_IMAGE,
...@@ -27,30 +26,6 @@ function getFileInfo(filePath: string): Promise<PlusIoMetadata> { ...@@ -27,30 +26,6 @@ function getFileInfo(filePath: string): Promise<PlusIoMetadata> {
}) })
} }
function compressImage(tempFilePath: string): Promise<string> {
const dst = `${TEMP_PATH}/compressed/${Date.now()}_${getFileName(
tempFilePath
)}`
return new Promise((resolve) => {
plus.nativeUI.showWaiting()
plus.zip.compressImage(
{
src: tempFilePath,
dst,
overwrite: true,
},
() => {
plus.nativeUI.closeWaiting()
resolve(dst)
},
() => {
plus.nativeUI.closeWaiting()
resolve(tempFilePath)
}
)
})
}
type File = { type File = {
path: string path: string
size: number size: number
...@@ -58,7 +33,7 @@ type File = { ...@@ -58,7 +33,7 @@ type File = {
export const chooseImage = defineAsyncApi<API_TYPE_CHOOSE_IMAGE>( export const chooseImage = defineAsyncApi<API_TYPE_CHOOSE_IMAGE>(
API_CHOOSE_IMAGE, API_CHOOSE_IMAGE,
// @ts-ignore crop 属性App特有 // @ts-expect-error crop 属性App特有
({ count, sizeType, sourceType, crop } = {}, { resolve, reject }) => { ({ count, sizeType, sourceType, crop } = {}, { resolve, reject }) => {
initI18nChooseImageMsgsOnce() initI18nChooseImageMsgsOnce()
const { t } = useI18n() const { t } = useI18n()
...@@ -86,38 +61,17 @@ export const chooseImage = defineAsyncApi<API_TYPE_CHOOSE_IMAGE>( ...@@ -86,38 +61,17 @@ export const chooseImage = defineAsyncApi<API_TYPE_CHOOSE_IMAGE>(
function openCamera() { function openCamera() {
const camera = plus.camera.getCamera() const camera = plus.camera.getCamera()
camera.captureImage( camera.captureImage((path) => successCallback([path]), errorCallback, {
(path) => { filename: TEMP_PATH + '/camera/',
// fix By Lxh 暂时添加拍照压缩逻辑,等客户端增加逻辑后修改 resolution: 'high',
// 判断是否需要压缩 crop,
if (sizeType && sizeType.includes('compressed')) { // @ts-expect-error
return getFileInfo(path) sizeType,
.then(({ size }) => { })
// 压缩阈值 0.5 兆
const THRESHOLD = 1024 * 1024 * 0.5
return size && size > THRESHOLD
? compressImage(path).then((dstPath) =>
successCallback([dstPath])
)
: successCallback([path])
})
.catch(errorCallback)
}
return successCallback([path])
},
errorCallback,
{
filename: TEMP_PATH + '/camera/',
resolution: 'high',
crop,
}
)
} }
function openAlbum() { function openAlbum() {
// NOTE 5+此API分单选和多选,多选返回files:string[] // @ts-ignore 5+此API分单选和多选,多选返回files:string[]
// @ts-ignore
plus.gallery.pick(({ files }) => successCallback(files), errorCallback, { plus.gallery.pick(({ files }) => successCallback(files), errorCallback, {
maximum: count, maximum: count,
multiple: true, multiple: true,
......
import { TEMP_PATH } from '../constants' import { TEMP_PATH } from '../constants'
import { warpPlusErrorCallback } from '../../../helpers/plus' import { warpPlusErrorCallback } from '../../../helpers/plus'
import { getFileName } from '../../../helpers/file'
import { initI18nChooseVideoMsgsOnce, useI18n } from '@dcloudio/uni-core' import { initI18nChooseVideoMsgsOnce, useI18n } from '@dcloudio/uni-core'
import { import {
API_TYPE_CHOOSE_VIDEO, API_TYPE_CHOOSE_VIDEO,
...@@ -17,56 +16,28 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>( ...@@ -17,56 +16,28 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>(
const { t } = useI18n() const { t } = useI18n()
const errorCallback = warpPlusErrorCallback(reject) const errorCallback = warpPlusErrorCallback(reject)
function successCallback(tempFilePath: string = '') { function successCallback(tempFilePath: string) {
const filename = `${TEMP_PATH}/compressed/${Date.now()}_${getFileName( plus.io.getVideoInfo({
tempFilePath filePath: tempFilePath,
)}` success(videoInfo) {
const compressVideo: Promise<string> = compressed const result = {
? new Promise((resolve) => { errMsg: 'chooseVideo:ok',
plus.zip.compressVideo( tempFilePath: tempFilePath,
{ size: videoInfo.size,
src: tempFilePath, duration: videoInfo.duration,
filename, width: videoInfo.width,
quality: 'medium', height: videoInfo.height,
}, }
({ tempFilePath }: { tempFilePath: string }) => { // @ts-expect-error tempFile、name 仅H5支持
resolve(tempFilePath) resolve(result)
}, },
() => { fail: errorCallback,
resolve(tempFilePath)
}
)
})
: Promise.resolve(tempFilePath)
if (compressed) {
plus.nativeUI.showWaiting()
}
compressVideo.then((tempFilePath: string) => {
if (compressed) {
plus.nativeUI.closeWaiting()
}
plus.io.getVideoInfo({
filePath: tempFilePath,
success(videoInfo) {
const result = {
errMsg: 'chooseVideo:ok',
tempFilePath: tempFilePath,
size: videoInfo.size,
duration: videoInfo.duration,
width: videoInfo.width,
height: videoInfo.height,
}
resolve(result as any)
},
fail: errorCallback,
})
}) })
} }
function openAlbum() { function openAlbum() {
plus.gallery.pick( plus.gallery.pick(
// NOTE 5+此API分单选和多选,多选返回files:string[] // @ts-ignore 5+此API分单选和多选,多选返回files:string[]
// @ts-ignore
({ files }) => successCallback(files[0]), ({ files }) => successCallback(files[0]),
errorCallback, errorCallback,
{ {
...@@ -77,6 +48,8 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>( ...@@ -77,6 +48,8 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>(
maximum: 1, maximum: 1,
filename: TEMP_PATH + '/gallery/', filename: TEMP_PATH + '/gallery/',
permissionAlert: true, permissionAlert: true,
// @ts-expect-error 新增参数,用于视频压缩
videoCompress: compressed,
} }
) )
} }
...@@ -87,6 +60,8 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>( ...@@ -87,6 +60,8 @@ export const chooseVideo = defineAsyncApi<API_TYPE_CHOOSE_VIDEO>(
index: camera === 'front' ? '2' : '1', index: camera === 'front' ? '2' : '1',
videoMaximumDuration: maxDuration, videoMaximumDuration: maxDuration,
filename: TEMP_PATH + '/camera/', filename: TEMP_PATH + '/camera/',
// @ts-expect-error 新增参数,用于视频压缩
videoCompress: compressed,
}) })
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册