vue.ts 1.46 KB
// @ts-nocheck
import {platform} from '../platform'
/**
 * buffer转路径
 * @param {Object} buffer
 */
// @ts-nocheck
export function arrayBufferToFile(buffer: ArrayBuffer | Blob, name?: string, format?:string):Promise<(File|string)> {
	return new Promise((resolve, reject) => {
		// #ifdef MP
		const fs = uni.getFileSystemManager()
		//自定义文件名
		if (!name && !format) {
			reject(new Error('ERROR_NAME_PARSE'))
		}
		const fileName = `${name || new Date().getTime()}.${format.replace(/(.+)?\//,'')}`;
		let pre = platform()
		const filePath = `${pre.env.USER_DATA_PATH}/${fileName}`
		fs.writeFile({
			filePath,
			data: buffer, 
			success() {
				resolve(filePath)
			},
			fail(err) {
				console.error(err)
				reject(err)
			}
		})
		// #endif

		// #ifdef H5
		const file = new File([buffer], name, {
		     type: format,
		});
		resolve(file)
		// #endif

		// #ifdef APP-PLUS
		const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
		const base64 = uni.arrayBufferToBase64(buffer)
		bitmap.loadBase64Data(base64, () => {
			if (!name && !format) {
				reject(new Error('ERROR_NAME_PARSE'))
			}
			const fileNmae = `${name || new Date().getTime()}.${format.replace(/(.+)?\//,'')}`;
			const filePath = `_doc/uniapp_temp/${fileNmae}`
			bitmap.save(filePath, {},
				() => {
					bitmap.clear()
					resolve(filePath)
				},
				(error) => {
					bitmap.clear()
					reject(error)
				})
		}, (error) => {
			bitmap.clear()
			reject(error)
		})
		// #endif
	})
}