1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- export type ParseImageUrlResult = {
- src: string
- source: string
- }
- function parseEditorImage (_blocks: any): UTSJSONObject[] {
- const images: UTSJSONObject[] = []
- let blocks: UTSJSONObject[]
- if (!Array.isArray(_blocks)) {
- blocks = [_blocks as UTSJSONObject] as UTSJSONObject[]
- } else {
- blocks = _blocks as UTSJSONObject[]
- }
- blocks.forEach((block: UTSJSONObject) => {
- const insert = block.getJSON('insert')
- const attributes = block.getJSON('attributes')
- const custom = attributes!.getString('data-custom')
- let parseCustom = custom && custom.split('&') ? custom.split('&').reduce((obj: UTSJSONObject, item: string): UTSJSONObject => {
- const kv = item.split('=')
- if (kv.length > 1) {
- obj[kv[0]] = kv[1]
- }
- return obj
- }, {} as UTSJSONObject) : {}
- images.push({
- src: insert!.getString('image'),
- source: parseCustom.getString('source') != null ? parseCustom.getString('source') : insert!.getString('image')
- })
- })
- return images
- }
- /**
- * 解析媒体库/编辑器中的图片
- * @param images 图片地址
- * @param type {string} 解析类型 media: 媒体库, editor: 编辑器
- * @returns {Promise<{src: *, source: *}[]|{src, source: *}[]>}
- */
- export async function parseImageUrl (images: any, type: string = "media"): Promise<ParseImageUrlResult[] | null> {
- let imagePaths: string[] = []
- if (type === "editor") {
- imagePaths = parseEditorImage(images).map((item: UTSJSONObject): string => item.getString('source')!)
- } else {
- if (!Array.isArray(images)) {
- imagePaths = [images as string] as string[]
- } else {
- imagePaths = images
- }
- }
- if (imagePaths.length <= 0) return null
- const tcbFiles = imagePaths.filter((item: string): boolean => item.startsWith("cloud://"))
- if (tcbFiles.length > 0) {
- const res: UniCloudGetTempFileURLResult = await uniCloud.getTempFileURL({
- fileList: tcbFiles
- })
- return imagePaths.map((image: string): ParseImageUrlResult => {
- const file = res.fileList.find((item: UniCloudGetTempFileURLResultItem): boolean => item.fileID === image)
- return {
- src: file ? file.tempFileURL : image,
- source: image
- } as ParseImageUrlResult
- })
- } else {
- return imagePaths.map((image: string): ParseImageUrlResult => ({
- src: image,
- source: image
- } as ParseImageUrlResult))
- }
- }
|