electron 日志打包并上传
前言
在开发electron应用中,可能需要上传应用的日志到后台服务器,已便发生问题时排查
参考:https://segmentfault.com/a/1190000021528488
文件压缩
实际应用中,日志文件可能有多个,这个时候可能需要对多个文件进行压缩。文件一般是放在固定的文件夹,这里封装了压缩整个文件夹的方法。
- 第三方库jszip,下载依赖包
yarn add jszip
- 封装方法
const fs = require('fs')
const JSZIP = require('jszip')
const zip = new JSZIP()
/**
* 将文件夹压缩成zip
* @param {*} folderPath 待压缩文件夹
* @param {*} targetPath 压缩后的文件路径
*/
export async function zipFolder(folderPath, targetPath) {
pushZip(zip, folderPath)
const content = await zip.generateAsync({
type: 'nodebuffer',
compression: 'DEFLATE',
compressionOptions: {
level: 9
}
})
await fs.writeFileSync(targetPath, content)
}
function pushZip(folder, pPath) {
const files = fs.readdirSync(pPath, {withFileTypes: true})
files.forEach((dirent, index) => {
let filePath = `${pPath}/${dirent.name}`
if (dirent.isDirectory()) {
let zipFloder = zip.folder(filePath.replace(`${folder}/`, ''))
pushZip(zipFloder, filePath)
} else {
folder.file(dirent.name, fs.readFileSync(filePath))
}
})
}
- 上传至远程服务器
// 第三方http请求库
import axios from 'axios'
const fs = require('fs')
function upload() {
const fileData = fs.readFileSync(zipFilePath)
let file = new File([fileData], 'log.zip', { type: 'application/x-zip-compressed' })
const formData = new FormData()
formData.append('file', file)
const requestUrl = `` // 请求的远程服务器地址
const res = await axios.post(requestUrl, formData)
// 后端接口返回数据,判断是否上传成功
// 上传成功删除压缩文件
fs.unlinkSync(zipFilePath)
}