请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

解压电子书目录,文件下为空

//Book.js
`const {
MINE_TYPE_EPUB,
UPLOAD_URL,
UPLOAD_PATH
} = require(’…/utils/constant’)
const fs = require(‘fs’)
const Epub = require(’…/utils/epub’)

//Book对象开发
class Book {
//构造函数
//file 表示电子书对象是刚上传的一电子书文件
//data 表示我们要做更新或者插入电子书数据
constructor(file, data) {
if(file){
this.createBookFromFile(file)
} else {
this.createBookFromData(data)
}
}

createBookFromFile(file) {
    const {
        destination,
        filename,
        mimetype = MINE_TYPE_EPUB,
        originalname,
        path
    } = file
    //电子书的文件后缀名
    const suffix = mimetype === MINE_TYPE_EPUB ? '.epub' : ''
    //电子书的原有路径
    const oldBookPath = path
    //电子书新路径
    const bookPath = `${destination}/${filename}${suffix}`
    //电子书的下载URL链接
    const url = `${UPLOAD_URL}/book/${filename}${suffix}`
    //电纸书解压后的文件夹路径
    const unzipPath = `${UPLOAD_PATH}/unzip/${filename}`
    //电子书解压后的文件夹URL
    const unzipUrl = `${UPLOAD_URL}/unzip/${filename}`
    //
    if (!fs.existsSync(unzipPath)) {
        fs.mkdirSync(unzipPath, { recursive: true })
    }
    //
    if (fs.existsSync(oldBookPath) && !fs.existsSync(bookPath)) {
        fs.renameSync(oldBookPath, bookPath)
    }

    this.fileName = filename //文件名
    this.path = `/book/${filename}${suffix}` //epub文件相对路径
    this.unzipPath = `/unzip/${filename}` //epub解压后相对路径
    this.filePath = this.path
    this.unzipUrl = unzipUrl //解压后文件夹链接
    this.originalname = originalname //源文件名
    this.url = url //epub文件下载链接
    this.title = '' //电子书的标题或者书名
    this.author = '' //作者
    this.publiser = '' //出版社
    this.contents = [] //目录
    this.cover = '' //封面图片URL
    this.coverPath = '' //封面图片的路径
    this.category = -1 //电子书分类ID
    this.categoryText = '' //分类名称
    this.language = '' //语种
}
createBookFromData(data) {
    console.log('data数据', data)
}

parse() {
    return new Promise((resolve, reject) =>{
        const bookPath = `${UPLOAD_PATH}${this.filePath}`
        if (!fs.existsSync(bookPath)) {
            reject(new Error('电子书不存在'))
        }
        const epub = new Epub(bookPath)
        epub.on('error', err =>{
            reject(err)
        })
        epub.on('end', err =>{
            if (err) {
                reject(err) 
            } else {
                const {
                    language,
                    title,
                    publisher,
                    cover,
                    creator,
                    creatorFileAs
                } = epub.metadata
                if(!title){
                    reject(new Error('图书标题为空'))
                } else {
                    this.title = title
                    this.language = language || 'en'
                    this.author = creator || creatorFileAs || 'unknown'
                    this.publiser = publisher || 'unknown'
                    this.rootFile = epub.rootFile
                    try {
                        this.unzip()
                        const handleGetImage = (err, file, mimeType) => {
                            if (err) {
                                reject(err)
                            } else {
                                const suffix = mimeType.split('/')[1]
                                const coverPath = `${UPLOAD_PATH}/img/${this.fileName}.${suffix}`
                                const coverUrl = `${UPLOAD_URL}/img/${this.fileName}.${suffix}`

                                fs.writeFileSync(coverPath, file, 'binary')
                                this.coverPath = `/img/${this.fileName}.${suffix}`
                                this.cover = coverUrl
                                resolve(this)
                            }
                        }
                        epub.getImage(cover, handleGetImage)
                    } catch (e) {
                        reject(e)
                    }
                    }
            }
        })
        epub.parse()
    })
}
unzip(){
    const AdmZip = require('adm-zip')
    const zip = new AdmZip(Book.genPath(this.path))
    zip.extractAllTo(Book.genPath(this.unzipPath), true)
}

static genPath(path){
    if (!path.startsWith('/')) {
        path = `/${path}`
    }
    return `${UPLOAD_PATH}${path}`
}

}

module.exports = Book`文件解析都正确代码无误解析电子书目录下面为空,

正在回答

2回答

扬_灵 2020-06-10 20:26:31

同学你好,在这个代码可以看到内容为空,应该是电子书解析错误了,你可以试着换一本equb电子书,或者把完整的代码上传一下,我在本地帮你定位一下问题。如果不能解决你的问题,可以继续追问。

0 回复 有任何疑惑可以回复我~
  • 提问者 DBkey_li #1
    来时这是我的git库
    https://github.com/lixiaoyanqq/dbkey-book-node
    https://github.com/lixiaoyanqq/dbkey-boob-admin
    您看一下
    回复 有任何疑惑可以回复我~ 2020-06-10 22:38:35
  • 提问者 DBkey_li #2
    解决了老师,后来不知怎么的,就可以解析了,应该是换一本equb电子书
    回复 有任何疑惑可以回复我~ 2020-06-10 23:22:27
扬_灵 2020-06-10 17:22:10

同学你好,你可以上传一下代码,我在本地帮你定位一下,如果不能解决你的问题,可以继续追问。

0 回复 有任何疑惑可以回复我~
  • 提问者 DBkey_li #1
    老师那是我的Book.js
    回复 有任何疑惑可以回复我~ 2020-06-10 18:01:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信