file.js 3.1 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import {
2
  warpPlusMethod,
Q
qiang 已提交
3 4
  warpPlusErrorCallback,
  getFileName
fxy060608's avatar
fxy060608 已提交
5 6 7 8 9 10 11 12 13 14
} from '../util'

import {
  invoke
} from '../../bridge'

const SAVED_DIR = 'uniapp_save'
const SAVE_PATH = `_doc/${SAVED_DIR}`

function getSavedFileDir (success, fail) {
15
  fail = fail || function () { }
fxy060608's avatar
fxy060608 已提交
16 17 18
  plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => { // 请求_doc fs
    fs.root.getDirectory(SAVED_DIR, { // 获取文件保存目录对象
      create: true
19 20 21 22
    }, success, fail)
  }, fail)
}

fxy060608's avatar
fxy060608 已提交
23 24 25
export function saveFile ({
  tempFilePath
} = {}, callbackId) {
26 27 28
  const errorCallback = warpPlusErrorCallback(callbackId, 'saveFile')
  let fileName = getFileName(tempFilePath)
  fileName = `${Date.now()}_${fileName}`
fxy060608's avatar
fxy060608 已提交
29

30 31 32 33
  plus.io.resolveLocalFileSystemURL(tempFilePath, entry => { // 读取临时文件 FileEntry
    getSavedFileDir(dir => {
      entry.copyTo(dir, fileName, () => { // 复制临时文件 FileEntry,为了避免把相册里的文件删除,使用 copy,微信中是要删除临时文件的
        const savedFilePath = SAVE_PATH + '/' + fileName
fxy060608's avatar
fxy060608 已提交
34
        invoke(callbackId, {
35 36
          errMsg: 'saveFile:ok',
          savedFilePath
fxy060608's avatar
fxy060608 已提交
37
        })
38 39 40
      }, errorCallback)
    }, errorCallback)
  }, errorCallback)
fxy060608's avatar
fxy060608 已提交
41 42 43
}

export function getSavedFileList (options, callbackId) {
44 45
  const errorCallback = warpPlusErrorCallback(callbackId, 'getSavedFileList')

fxy060608's avatar
fxy060608 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
  getSavedFileDir(entry => {
    var reader = entry.createReader()

    var fileList = []
    reader.readEntries(entries => {
      if (entries && entries.length) {
        entries.forEach(entry => {
          entry.getMetadata(meta => {
            fileList.push({
              filePath: plus.io.convertAbsoluteFileSystem(entry.fullPath),
              createTime: meta.modificationTime.getTime(),
              size: meta.size
            })
            if (fileList.length === entries.length) {
              invoke(callbackId, {
                errMsg: 'getSavedFileList:ok',
                fileList
              })
            }
65
          }, errorCallback, false)
fxy060608's avatar
fxy060608 已提交
66 67 68 69 70 71 72
        })
      } else {
        invoke(callbackId, {
          errMsg: 'getSavedFileList:ok',
          fileList
        })
      }
73 74
    }, errorCallback)
  }, errorCallback)
fxy060608's avatar
fxy060608 已提交
75 76
}

77
export const getFileInfo = warpPlusMethod(plus.io, 'getFileInfo')
fxy060608's avatar
fxy060608 已提交
78 79 80 81

export function getSavedFileInfo ({
  filePath
} = {}, callbackId) {
82 83 84
  const errorCallback = warpPlusErrorCallback(callbackId, 'getSavedFileInfo')

  plus.io.resolveLocalFileSystemURL(filePath, entry => {
fxy060608's avatar
fxy060608 已提交
85 86 87 88 89 90
    entry.getMetadata(meta => {
      invoke(callbackId, {
        createTime: meta.modificationTime.getTime(),
        size: meta.size,
        errMsg: 'getSavedFileInfo:ok'
      })
91 92
    }, errorCallback, false)
  }, errorCallback)
fxy060608's avatar
fxy060608 已提交
93 94 95 96 97
}

export function removeSavedFile ({
  filePath
} = {}, callbackId) {
98 99 100
  const errorCallback = warpPlusErrorCallback(callbackId, 'removeSavedFile')

  plus.io.resolveLocalFileSystemURL(filePath, entry => {
fxy060608's avatar
fxy060608 已提交
101 102 103 104
    entry.remove(() => {
      invoke(callbackId, {
        errMsg: 'removeSavedFile:ok'
      })
105 106
    }, errorCallback)
  }, errorCallback)
fxy060608's avatar
fxy060608 已提交
107
}