UNPKG

mtl-js-sdk

Version:

ynf-fw-mtl-api

403 lines (376 loc) 11.7 kB
import {invokeSuccess, invokeFail} from '../callback' import {uploadFile} from '../util' import {requestPermission} from '../permission' import {execUpesnBridgeify,canExecUpesnBridge, execUpesnBridge} from '../bridge/index' /** * 打开文件, 6.3.1版本统一openInOtherApp逻辑 * @param {string} filePath 文件的本地地址(通过下载文件获取的本地路径) * @param {string} fileType 文件格式jpeg,txt,pdf等 * @param {string} fileName 文件名 * @param {string} openInOtherApp 是否调用其他应用打开 1 使用【该参数仅对iOS生效,android本身该功能就是用系统应用打开,无需解析】 */ export function openLocalFile(param = {}) { let openInOtherApp = param?.openInOtherApp || '0' if (openInOtherApp === '1' || openInOtherApp === 1 || openInOtherApp === true) { const sharedModule = window.api?.require('shareAction'); if (sharedModule) { sharedModule.shareFile({ text: param?.fileName || "来自友空间分享的文件", path: param?.filePath, iPad: param?.iPad, success: param?.success, fail: param?.fail }); return } } let obj = api.require('mtlOpenFile'); if (!obj) { if (canExecUpesnBridge()) { execUpesnBridgeify('openDocument', param); return; } invokeFail(param, {msg:'module mtlOpenFile not added'}); return; } requestPermission({ list:['storage-r'], success:function(){ obj.openLocalFile(param, function(ret, err){ if (ret && ret.status) { invokeSuccess(param, ret); } else { invokeFail(param, err || ret); } }); }, fail:param.fail }); } export function chooseLocalFiles(param = {}) { let obj = api.require('mtlFile'); if (!obj) { if (canExecUpesnBridge()) { execUpesnBridgeify('chooseLocalFiles', param); return; } invokeFail(param, {msg:'module mtlOpenFile not added'}); return; } requestPermission({ list:['storage'], success:function(){ obj.chooseLocalFiles(param, function(ret, err) { if (ret && ret.status) { invokeSuccess(param, ret); } else { invokeFail(param, err); } }); }, fail:param.fail }); } export function chooseLocalFileToServer(param = {}) { let obj = api.require('mtlFile'); if (!obj) { if (canExecUpesnBridge()) { execUpesnBridgeify('chooseLocalFileToServer', param); return; } invokeFail(param, {msg:'module mtlFile not added'}); return; } let {success, fail} = param; param.success = function(res) { let localIds = []; res.localfiles.forEach(function(item){ localIds.push(item.filePath); }); uploadFile({ type:'file', files:localIds, success:function(data) { invokeSuccess({success:success}, {files:data.files}); }, fail:function(err) { invokeFail({fail:fail}, err); } }); }; param.fail = function(err) { invokeFail({fail:fail}, err); } chooseLocalFiles(param); } export function moveFileToDisk(param = {}) { let filePath = param.filePath; let newDirName = 'box://mtlFileFolder'; let newPath = ''; let fileName = ''; if (filePath) { let fileNameArr = filePath.split('/'); if (fileNameArr && fileNameArr.length > 0) { fileName = fileNameArr[fileNameArr.length - 1]; } newPath = newDirName + '/' + fileName; } let fs = api.require("fs"); fs && fs.copyTo({ oldPath: filePath, newPath: newDirName }, function(ret, err) { if (ret && ret.status) { invokeSuccess(param, {filePath: newPath}); } else { invokeFail(param, err); } }); } export function writeLog(param) { if (!param) return; let {data, tag='writeLog'} = param; if (data) { api.writeLog && api.writeLog({ tag, data }); invokeSuccess(param, {}); } else { invokeFail(param, {message:'param error'}); } } const mtlLogPath = 'fs://mtl-js/' export function writeLocationLog(param = {}) { const dateTime = new Date(); const date = dateTime.toLocaleDateString() const time = dateTime.toLocaleTimeString() const milliseconds = dateTime.getMilliseconds() const { parameterDic, fileName = 'log', showDate = true } = param const filePath = `${mtlLogPath}${fileName}.txt` api.writeFile({ path: filePath, data: showDate ? `${date} ${time}:${milliseconds} ${parameterDic}\n` : `${parameterDic}\n`, append: true }, function(ret, err) { if (ret) { invokeSuccess(param, ret); // 删除超过7M的文件内容 var fs = api.require("fs"); if (fs) { fs.getAttribute({path: filePath}, function(ret, err){ if (ret && ret.status) { const size = ret.attribute && ret.attribute.size const sizePoor = Number(size) - 1024 * 1024 * 2 if (sizePoor > 0) { fs.writeByLength({ path: filePath, content: '\n', place:{strategy: sizePoor}}) } } else { console.log('getAttribute error: ', err) } }) } } else { invokeFail(param, err); } }); } export function readLocationLog(param = {}) { const { fileName = 'log' } = param const filePath = `${mtlLogPath}${fileName}.txt` api.readFile({path: filePath}, function(ret, err){ if (ret && ret.status) { invokeSuccess(param, ret) } else { invokeFail(param, err) } }) } export function isFileExist(param = {}) { if (param?.filePath && param?.fileName) { invokeFail(param, { msg: 'filePath or fileName is empty!' }); return; } var fs = api.require('fs'); if (!fs) { if (canExecUpesnBridge()) { execUpesnBridgeify('isFileExist', param); return; } invokeFail(param, {msg:'module fs not added'}); return; } let filePath = param?.filePath if (!filePath) { filePath = `cache://${param?.fileName}.${param?.fileType}` } fs.exist({ path: filePath }, function(ret, err) { if (ret.exist) { invokeSuccess(param, {...ret, isExist: ret.exist}); } else { invokeFail(param, err); } }); } export function chooseFile(param = {}) { execUpesnBridge({method: 'chooseFile', ...param}) } export function selectFiles(param = {}) { execUpesnBridge({method: 'selectFiles', ...param}) } export function getLocalImgSrc(param = {}) { const { localId } = param if (localId != undefined || localId != null) { let data = { imgSrc: localId }; invokeSuccess(param, data) } else { let err = { message: "not found src" }; invokeFail(param, err); } } export function previewDoc(param = {}) { if (canExecUpesnBridge()) { execUpesnBridgeify('previewDoc', param); return; } const { downloadUrl, fileId } = param if (fileId) { loadFileSercice(param) } else if (downloadUrl) { mtl.navigateTo({canShowMIMEType: false, ...param, url: downloadUrl}) } else { let err = { message: "fileId、downloadUrl is null" }; invokeFail(param, err); } } export function previewFile(param = {}) { if (canExecUpesnBridge()) { execUpesnBridgeify('previewFile', param); return; } const { fid } = param if (fid) { if (!(fid.startsWith('http'))) { loadFileSercice({...param, fileId: fid}) } else { mtl.navigateTo({canShowMIMEType: false, ...param, url: fid}) } } else { let err = { message: "fid is null" }; invokeFail(param, err); } } export function wpsPreview(param = {}) { if (param?.isPremises) { mtl.navigateTo({canShowMIMEType: false, ...param, url: param?.fileUrl}) return } if (canExecUpesnBridge()) { execUpesnBridgeify('wpsPreview', param); return; } const { fileUrl, fileId } = param if (fileId) { loadFileSercice(param) } else if (fileUrl) { mtl.navigateTo({canShowMIMEType: false, ...param, url: fileUrl}) } else { let err = { message: "fileId、fileUrl is null" }; invokeFail(param, err); } } function loadFileSercice(param = {}) { if (!window.YYCooperationBridge) { let domain = param?.domain || param?.url window.mtl && window.mtl.loadMtlCDNJs({ url: domain || '/iuap-apcom-file/ucf-wh/fileservice/app/fileservice-app.min.js', type: 'all', success:function(res) { previewUrl(param) }, fail: function(err){ invokeFail(param, err); } }) } else { previewUrl(param) } } function previewUrl(param) { const { fileId, serviceCode, extraParams = {} } = param extraParams.authId = serviceCode window.YYCooperationBridge && window.YYCooperationBridge.ready(() => { window.YYCooperationBridge.YYGetPreviewUrlById({ ...param, fileId: fileId, extraParams }).then(res=>{ if (typeof res === 'string') { window.mtl.navigateTo({ canShowMIMEType: false, url:res, ...param }); } else if (typeof res === 'object') { invokeFail(param, err); } }).catch(err=>{ invokeFail(param, err); }); }); } /** * 保存文件流到手机本地 * @param {object} param */ export function saveFilesToLocal(param = {}) { // 透传给移动端 if (canExecUpesnBridge()) { execUpesnBridgeify('saveFilesToLocal', param); return; } // 私有版无函数实现 invokeFail(param, { code: "-10001", msg: "The current platform doesn't support this api" }); } /** * 文件服务 - 预览, 6.2.13版本新增 * @param {string} fileUrl 文件路径 * @param {string} fileId 文件ID * @param {string} domain 域名.'https://bip-pre.yonyoucloud.com', 不带'/' */ export function previewFileService(param = {}) { const { fileUrl, fileId } = param // 如果 fileId 存在则优先处理 if (fileId) { // 文件服务预览 loadFileSercice(param) return } // 如果只传了 fileUrl, 则直接跳转处理 if (fileUrl) { mtl.navigateTo({ canShowMIMEType: false, url: fileUrl, ...param, }) } else { let err = { message: "fileId、fileUrl is null" }; invokeFail(param, err); } }