完成文件的上传处理
This commit is contained in:
parent
a42ec8d894
commit
3be11b386e
|
|
@ -3,6 +3,7 @@ const crypto = require('crypto');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const read = require('node-readability');
|
const read = require('node-readability');
|
||||||
|
const cheerio = require('cheerio');
|
||||||
|
|
||||||
function md5(str) {
|
function md5(str) {
|
||||||
return crypto.createHash('md5').update(str).digest('hex');
|
return crypto.createHash('md5').update(str).digest('hex');
|
||||||
|
|
@ -374,14 +375,97 @@ module.exports = class extends Base {
|
||||||
// path: 'C:\\Users\\lucq\\AppData\\Local\\Temp\\upload_4ae3b14dacaa107076d3bddd471ebe39.html',
|
// path: 'C:\\Users\\lucq\\AppData\\Local\\Temp\\upload_4ae3b14dacaa107076d3bddd471ebe39.html',
|
||||||
// name: 'exportbookmark-lcq-20200402084709.html',
|
// name: 'exportbookmark-lcq-20200402084709.html',
|
||||||
// type: 'text/html',
|
// type: 'text/html',
|
||||||
const file = this.file();
|
const file = this.file("file");
|
||||||
this.json({ code: 0 });
|
|
||||||
// const fileName = this.ctx.state.user.username;
|
let bookmarks = [];
|
||||||
// if (file) {
|
|
||||||
// const filepath = path.join(think.ROOT_PATH, `runtime/upload/${fileName}.html`);
|
let now = new Date().getTime();
|
||||||
// think.mkdir(path.dirname(filepath));
|
let fileName = 'uploadbookmark-' + this.ctx.state.user.username + '-' + now + '.html';
|
||||||
// await rename(file.path, filepath);
|
if (file) {
|
||||||
// }
|
const filePath = path.join(think.ROOT_PATH, `runtime/upload/${fileName}`);
|
||||||
|
await fs.ensureDir(path.dirname(filePath));
|
||||||
|
await fs.move(file.path, filePath);
|
||||||
|
let data = await fs.readFile(filePath);
|
||||||
|
let $ = cheerio.load(data.toString());
|
||||||
|
|
||||||
|
let anchors = $("dl").find("a");
|
||||||
|
anchors.each(async (i, e) => {
|
||||||
|
let url = $(e).attr("href");
|
||||||
|
let title = $(e).text() || "无标题";
|
||||||
|
if (title.length > 255) {
|
||||||
|
title = title.substring(255);
|
||||||
|
}
|
||||||
|
title = title.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/gi, "");
|
||||||
|
let attrCreatedAt = $(e).attr("add_date");
|
||||||
|
let attrLastClick = $(e).attr("last_click");
|
||||||
|
let attrClickCount = $(e).attr("click_count");
|
||||||
|
let createdAt = think.datetime(attrCreatedAt ? parseInt(attrCreatedAt) * 1000 : new Date());
|
||||||
|
let lastClick = think.datetime(attrLastClick ? parseInt(attrLastClick) * 1000 : new Date());
|
||||||
|
let clickCount = attrClickCount ? parseInt(attrClickCount) : 1;
|
||||||
|
|
||||||
|
// 只允许用一个标签
|
||||||
|
let tagName = "未分类";
|
||||||
|
$(e).parents("dl").each(function (ii, ee) {
|
||||||
|
let folder = $(ee).prev();
|
||||||
|
let temp = folder.text().replace(/(^\s*)|(\s*$)/g, '').replace(/\s+/g, ' ');
|
||||||
|
if (temp != "Bookmarks" && temp != "书签栏" && temp != "" && temp != undefined) { tagName = temp; }
|
||||||
|
});
|
||||||
|
bookmarks.push({ title, url, createdAt, lastClick, tagName, clickCount, userId: this.ctx.state.user.id })
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let count = 0;
|
||||||
|
let repeat = 0;
|
||||||
|
let tags = await this.model('tags').where({ userId: this.ctx.state.user.id }).select();
|
||||||
|
for (let bookmark of bookmarks) {
|
||||||
|
let find = await this.model('bookmarks').where({ userId: this.ctx.state.user.id, url: bookmark.url }).find();
|
||||||
|
if (think.isEmpty(find)) {
|
||||||
|
let tag = tags.find(item => item.name == bookmark.tagName);
|
||||||
|
if (tag) {
|
||||||
|
bookmark.tagId = tag.id;
|
||||||
|
} else {
|
||||||
|
bookmark.tagId = await this.model("tags").add({ userId: this.ctx.state.user.id, name: bookmark.tagName });
|
||||||
|
tags.push({
|
||||||
|
id: bookmark.tagId,
|
||||||
|
name: bookmark.tagName
|
||||||
|
})
|
||||||
|
}
|
||||||
|
delete bookmark.tagName;
|
||||||
|
await this.model("bookmarks").add(bookmark);
|
||||||
|
count++;
|
||||||
|
} else {
|
||||||
|
repeat++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.json({ code: 0, data: count, msg: `书签传入${bookmarks.length}个,重复书签${repeat}个,成功导入${count}个。` });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 书签备份
|
||||||
|
async bookmarkBackupAction() {
|
||||||
|
let init = '<TITLE>Bookmarks</TITLE><H1>Bookmarks</H1><DL id="0"></DL>';
|
||||||
|
let $ = cheerio.load(init, {
|
||||||
|
decodeEntities: false,
|
||||||
|
xmlMode: true,
|
||||||
|
});
|
||||||
|
let time = (date) => parseInt(new Date(date).getTime() / 1000); // 日期转时间
|
||||||
|
|
||||||
|
let tags = await this.model('tags').where({ userId: this.ctx.state.user.id }).order('sort ASC, lastUse DESC').select();
|
||||||
|
for (const tag of tags) {
|
||||||
|
$('#0').append(`<DT><H3>${tag.name}</H3></DT><DL id="${tag.id}"></DL>`);
|
||||||
|
let bookmarks = await this.model('bookmarks').where({ tagId: tag.id }).select();
|
||||||
|
for (const bookmark of bookmarks) {
|
||||||
|
$('#' + tag.id).append(`<DT><A HREF="${bookmark.url}" ADD_DATE="${time(bookmark.createdAt)}" LAST_CLICK="${time(bookmark.lastClick)}" CLICK_COUNT="${bookmark.clickCount}" >${bookmark.title}</A></DT>`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let now = new Date().getTime()
|
||||||
|
let fileName = 'exportbookmark-' + this.ctx.state.user.username + '-' + now + '.html';
|
||||||
|
let filePath = path.join(think.ROOT_PATH, 'runtime', 'backup', fileName);
|
||||||
|
|
||||||
|
await fs.ensureFile(filePath);
|
||||||
|
await fs.writeFile(filePath, $.xml());
|
||||||
|
this.json({ code: 0, data: `runtime/backup/${fileName}` });
|
||||||
|
setTimeout(() => fs.remove(filePath), 10000);
|
||||||
|
// await this.download(filePath, fileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取文章
|
// 获取文章
|
||||||
|
|
|
||||||
|
|
@ -117,12 +117,8 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.exportBookmark = async function () {
|
$scope.exportBookmark = async function () {
|
||||||
var userId = $scope.user && $scope.user.id;
|
let data = await get('bookmarkBackup');
|
||||||
if (userId) {
|
console.log(data);
|
||||||
$window.open("api/download?userId=" + userId + "&type=exportbookmark");
|
|
||||||
} else {
|
|
||||||
toastr.warning('用户信息无法获取到,请尝试按刷新网页再尝试!', '提示');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
|
|
@ -130,7 +126,6 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
|
||||||
url: "/api/bookmarkUpload",
|
url: "/api/bookmarkUpload",
|
||||||
multiple: false,
|
multiple: false,
|
||||||
dragDrop: true,
|
dragDrop: true,
|
||||||
fileName: "bookmark",
|
|
||||||
acceptFiles: "text/html",
|
acceptFiles: "text/html",
|
||||||
maxFileSize: 10 * 1024 * 1024, // 最大10M
|
maxFileSize: 10 * 1024 * 1024, // 最大10M
|
||||||
dragdropWidth: "100%",
|
dragdropWidth: "100%",
|
||||||
|
|
@ -145,8 +140,9 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
|
||||||
login: true,
|
login: true,
|
||||||
index: dataService.LoginIndexBookmarks
|
index: dataService.LoginIndexBookmarks
|
||||||
});
|
});
|
||||||
$state.go('bookmarks', {})
|
$state.go('tags', {})
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
toastr.success(response.msg, "提示");
|
||||||
} else {
|
} else {
|
||||||
toastr.success('文件上传失败:' + response.msg, "提示");
|
toastr.success('文件上传失败:' + response.msg, "提示");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue