You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
917 B
30 lines
917 B
import ePub from 'epubjs';
|
|
|
|
export default function readEpubContent(file: File): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.onload = function (e: any) {
|
|
const arrayBuffer = e.target.result;
|
|
const book = ePub(arrayBuffer);
|
|
|
|
book.loaded?.spine?.then?.((spine: any) => {
|
|
const chapterPromises = spine.spineItems?.map?.((chapter: any) => {
|
|
return book.load(chapter.href).then((content: any) => {
|
|
return content.body?.textContent || '';
|
|
});
|
|
});
|
|
Promise.all(chapterPromises)
|
|
.then((chaptersText) => {
|
|
const result = chaptersText.join('');
|
|
resolve(result);
|
|
})
|
|
.catch((error) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
};
|
|
reader.onerror = (error) => reject(error);
|
|
reader.readAsArrayBuffer(file);
|
|
});
|
|
}
|