UNPKG

wsemi

Version:

A support package for web developer.

141 lines (109 loc) 3.43 kB
// import path from 'path' // import fs from 'fs' import get from 'lodash-es/get.js' import isbol from './isbol.mjs' import fsIsFileCore from './fsIsFileCore.mjs' import fsCreateFolderCore from './fsCreateFolderCore.mjs' function fsCopyFileCoreSync(fpSrc, fpTar, opt = {}) { //path, fs let path = get(opt, 'path') let fs = get(opt, 'fs') //check if (!fsIsFileCore(fpSrc, { fs })) { return { error: `fpSrc[${fpSrc}] is not a file` } } //複製檔案 try { //fsCreateFolderCore fsCreateFolderCore(path.dirname(fpTar), { fs }) //copyFileSync fs.copyFileSync(fpSrc, fpTar) } catch (err) { return { error: err } } return { success: 'done: ' + fpTar } } async function fsCopyFileCoreAsync(fpSrc, fpTar, opt = {}) { //path, fs let path = get(opt, 'path') let fs = get(opt, 'fs') //check if (!fsIsFileCore(fpSrc, { fs })) { return { error: `fpSrc[${fpSrc}] is not a file` } } //fsCopyFileCoreAsyncCore let fsCopyFileCoreAsyncCore = async (fpSrc, fpTar) => { //fsCreateFolderCore fsCreateFolderCore(path.dirname(fpTar), { fs }) //使用串流方式複製檔案 await new Promise((resolve, reject) => { //streamRead, streanWrite let streamRead = fs.createReadStream(fpSrc) let streanWrite = fs.createWriteStream(fpTar) //on streamRead.on('error', reject) streanWrite.on('error', reject) streanWrite.on('finish', resolve) //pipe streamRead.pipe(streanWrite) }) } //fsCopyFileCoreAsyncCore let r = null await fsCopyFileCoreAsyncCore(fpSrc, fpTar) .then(() => { r = { success: 'done: ' + fpTar } }) .catch((err) => { r = { error: err } }) return r } /** * 後端nodejs複製檔案 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/fsCopyFileCore.test.mjs Github} * @memberOf wsemi * @param {String} fpSrc 輸入來源檔案路徑字串 * @param {String} fpTar 輸入目的檔案路徑字串 * @param {Object} [opt={}] 輸入設定物件,預設{} * @param {Boolean} [opt.useSync=true] 輸入是否使用同步函數布林值,預設true * @returns {Object|Promise} 若useSync=true回傳結果物件,提供鍵success代表成功訊息,提供鍵error代表錯誤訊息,若useSync=false則回傳Promise,resolve回傳結果物件,提供鍵success代表成功訊息,提供鍵error代表錯誤訊息,不觸發reject * @example * need test in nodejs. * * //see fsCopyFile * */ function fsCopyFileCore(fpSrc, fpTar, opt = {}) { //path, fs let path = get(opt, 'path') let fs = get(opt, 'fs') //useSync let useSync = get(opt, 'useSync', '') if (!isbol(useSync)) { useSync = true } let r = '' if (useSync) { r = fsCopyFileCoreSync(fpSrc, fpTar, { path, fs }) } else { r = fsCopyFileCoreAsync(fpSrc, fpTar, { path, fs }) } return r } export default fsCopyFileCore