完成文件上传,将文件里面的内容插入到数据库里面
This commit is contained in:
parent
c6cfbe69b1
commit
1f6c7bb2fb
11
app.js
11
app.js
|
|
@ -6,7 +6,6 @@ var cookieParser = require('cookie-parser');
|
||||||
var bodyParser = require('body-parser');
|
var bodyParser = require('body-parser');
|
||||||
var session = require('express-session');
|
var session = require('express-session');
|
||||||
var mongoStore = require('connect-mongo')(session);
|
var mongoStore = require('connect-mongo')(session);
|
||||||
var mount_uploadify = require('uploadify');
|
|
||||||
|
|
||||||
var routes = require('./routes/index');
|
var routes = require('./routes/index');
|
||||||
var users = require('./routes/users');
|
var users = require('./routes/users');
|
||||||
|
|
@ -43,16 +42,6 @@ app.use(session({
|
||||||
app.use(express.static(path.join(__dirname, 'public')));
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
|
|
||||||
app.use('/', routes);
|
app.use('/', routes);
|
||||||
mount_uploadify(app, {
|
|
||||||
path: '/fileupload',
|
|
||||||
fileKey: 'myfile',
|
|
||||||
multer: {
|
|
||||||
dest: 'uploads/'
|
|
||||||
},
|
|
||||||
callback: function(req) {
|
|
||||||
return req.files
|
|
||||||
}
|
|
||||||
});
|
|
||||||
app.use('/api', api);
|
app.use('/api', api);
|
||||||
app.use('/users', users);
|
app.use('/users', users);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,15 +42,27 @@ var db = {
|
||||||
// });
|
// });
|
||||||
|
|
||||||
db.addBookmark = function(user_id, bookmark) {
|
db.addBookmark = function(user_id, bookmark) {
|
||||||
var sql = "INSERT INTO `bookmarks` (`user_id`, `title`, `description`, `url`, `public`, `click_count`) VALUES ('" + user_id + "', '" + bookmark.title + "', '" + bookmark.description + "', '" + bookmark.url + "', '" + bookmark.public + "', '1')";
|
var insertSql = "INSERT INTO `bookmarks` (`user_id`, `title`, `description`, `url`, `public`, `click_count`) VALUES ('" + user_id + "', '" + bookmark.title + "', '" + bookmark.description + "', '" + bookmark.url + "', '" + bookmark.public + "', '1')";
|
||||||
|
var selectSql = "SELECT * FROM `bookmarks` WHERE `user_id` = '" + user_id + "' AND `url` = '" + bookmark.url + "'"
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
client.query(sql, (err, result) => {
|
client.query(selectSql, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
if (result.length >= 1) {
|
||||||
|
resolve(result[0].id);
|
||||||
|
} else {
|
||||||
|
client.query(insertSql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
} else {
|
} else {
|
||||||
resolve(result.insertId);
|
resolve(result.insertId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -294,7 +306,7 @@ db.getAdvices = function(params) {
|
||||||
|
|
||||||
db.addAdvice = function(params) {
|
db.addAdvice = function(params) {
|
||||||
console.log('addAdvice');
|
console.log('addAdvice');
|
||||||
var sql = "INSERT INTO `advices` (`user_id`, `comment`, `category`) VALUES ('"+ params.user_id +"', '"+ params.comment +"', '"+ params.category +"')";
|
var sql = "INSERT INTO `advices` (`user_id`, `comment`, `category`) VALUES ('" + params.user_id + "', '" + params.comment + "', '" + params.category + "')";
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
client.query(sql, (err, result) => {
|
client.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
@ -330,6 +342,9 @@ db.addTags = function(user_id, tags_name) {
|
||||||
sql += "('" + user_id + "', '" + name + "')";
|
sql += "('" + user_id + "', '" + name + "')";
|
||||||
});
|
});
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
|
if (tags_name.length == 0) {
|
||||||
|
reject("tags_name is empty");
|
||||||
|
} else {
|
||||||
client.query(sql, (err, result) => {
|
client.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err);
|
reject(err);
|
||||||
|
|
@ -337,6 +352,7 @@ db.addTags = function(user_id, tags_name) {
|
||||||
resolve(result.insertId);
|
resolve(result.insertId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
"express": "~4.13.4",
|
"express": "~4.13.4",
|
||||||
"express-session": "^1.14.1",
|
"express-session": "^1.14.1",
|
||||||
"morgan": "~1.7.0",
|
"morgan": "~1.7.0",
|
||||||
|
"multer": "^1.3.0",
|
||||||
"mysql": "^2.11.1",
|
"mysql": "^2.11.1",
|
||||||
"node-readability": "^2.2.0",
|
"node-readability": "^2.2.0",
|
||||||
"serve-favicon": "~2.3.0",
|
"serve-favicon": "~2.3.0",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,146 @@
|
||||||
|
.ajax-file-upload-statusbar {
|
||||||
|
border: 1px solid #0ba1b5;
|
||||||
|
margin-top: 10px;
|
||||||
|
width: 420px;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin: 5px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px 5px 5px 15px
|
||||||
|
}
|
||||||
|
|
||||||
|
.ajax-file-upload-filename {
|
||||||
|
width: 300px;
|
||||||
|
height: auto;
|
||||||
|
margin: 0 5px 5px 0px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.ajax-file-upload-filesize {
|
||||||
|
width: 50px;
|
||||||
|
height: auto;
|
||||||
|
margin: 0 5px 5px 0px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
.ajax-file-upload-progress {
|
||||||
|
margin: 5px 10px 5px 0px;
|
||||||
|
position: relative;
|
||||||
|
width: 250px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
padding: 1px;
|
||||||
|
border-radius: 3px;
|
||||||
|
display: inline-block;
|
||||||
|
color:#FFFFFF;
|
||||||
|
|
||||||
|
}
|
||||||
|
.ajax-file-upload-bar {
|
||||||
|
background-color: #0ba1b5;
|
||||||
|
width: 0;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
color:#FFFFFF;
|
||||||
|
|
||||||
|
}
|
||||||
|
.ajax-file-upload-percent {
|
||||||
|
position: absolute;
|
||||||
|
display: inline-block;
|
||||||
|
top: 3px;
|
||||||
|
left: 48%
|
||||||
|
}
|
||||||
|
.ajax-file-upload-red {
|
||||||
|
-moz-box-shadow: inset 0 39px 0 -24px #e67a73;
|
||||||
|
-webkit-box-shadow: inset 0 39px 0 -24px #e67a73;
|
||||||
|
box-shadow: inset 0 39px 0 -24px #e67a73;
|
||||||
|
background-color: #e4685d;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
font-family: arial;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 4px 15px;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0 1px 0 #b23e35;
|
||||||
|
cursor: pointer;
|
||||||
|
vertical-align: top;
|
||||||
|
margin: 5px 10px 5px 0px;
|
||||||
|
}
|
||||||
|
.ajax-file-upload-green {
|
||||||
|
background-color: #77b55a;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: inline-block;
|
||||||
|
color: #fff;
|
||||||
|
font-family: arial;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 4px 15px;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
text-shadow: 0 1px 0 #5b8a3c;
|
||||||
|
vertical-align: top;
|
||||||
|
margin: 5px 10px 5px 0px;
|
||||||
|
}
|
||||||
|
.ajax-file-upload {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 15px 20px;
|
||||||
|
cursor:pointer;
|
||||||
|
line-height:20px;
|
||||||
|
height:25px;
|
||||||
|
margin:0 10px 10px 0;
|
||||||
|
display: inline-block;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #e8e8e8;
|
||||||
|
color: #888;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
-moz-box-shadow: 0 2px 0 0 #e8e8e8;
|
||||||
|
-webkit-box-shadow: 0 2px 0 0 #e8e8e8;
|
||||||
|
box-shadow: 0 2px 0 0 #e8e8e8;
|
||||||
|
padding: 6px 10px 4px 10px;
|
||||||
|
color: #fff;
|
||||||
|
background: #2f8ab9;
|
||||||
|
border: none;
|
||||||
|
-moz-box-shadow: 0 2px 0 0 #13648d;
|
||||||
|
-webkit-box-shadow: 0 2px 0 0 #13648d;
|
||||||
|
box-shadow: 0 2px 0 0 #13648d;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ajax-file-upload:hover {
|
||||||
|
background: #3396c9;
|
||||||
|
-moz-box-shadow: 0 2px 0 0 #15719f;
|
||||||
|
-webkit-box-shadow: 0 2px 0 0 #15719f;
|
||||||
|
box-shadow: 0 2px 0 0 #15719f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ajax-upload-dragdrop
|
||||||
|
{
|
||||||
|
|
||||||
|
border:2px dotted #A5A5C7;
|
||||||
|
width:420px;
|
||||||
|
color: #DADCE3;
|
||||||
|
text-align:left;
|
||||||
|
vertical-align:middle;
|
||||||
|
padding:10px 10px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.state-hover
|
||||||
|
{
|
||||||
|
border:2px solid #A5A5C7;
|
||||||
|
}
|
||||||
|
.ajax-file-upload-container
|
||||||
|
{
|
||||||
|
margin:20px 0px 20px 0px;
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
<link href="/css/externe/calendar.min.css" rel="stylesheet"/>
|
<link href="/css/externe/calendar.min.css" rel="stylesheet"/>
|
||||||
<link href="/css/externe/toastr.min.css" rel="stylesheet"/>
|
<link href="/css/externe/toastr.min.css" rel="stylesheet"/>
|
||||||
<link href="/css/style.css " rel="stylesheet"/>
|
<link href="/css/style.css " rel="stylesheet"/>
|
||||||
<link href="http://hayageek.github.io/jQuery-Upload-File/4.0.10/uploadfile.css" rel="stylesheet">
|
<link href="/css/externe/uploadfile.css" rel="stylesheet">
|
||||||
<base href="/">
|
<base href="/">
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="bookmarkApp">
|
<body ng-app="bookmarkApp">
|
||||||
|
|
@ -55,6 +55,6 @@
|
||||||
<script src="/scripts/controllers/search-controller.js"></script>
|
<script src="/scripts/controllers/search-controller.js"></script>
|
||||||
<script src="/scripts/externe/semantic.min.js"></script>
|
<script src="/scripts/externe/semantic.min.js"></script>
|
||||||
<script src="/scripts/externe/calendar.min.js"></script>
|
<script src="/scripts/externe/calendar.min.js"></script>
|
||||||
<script src="http://hayageek.github.io/jQuery-Upload-File/4.0.10/jquery.uploadfile.min.js"></script>
|
<script src="/scripts/externe/jquery.uploadfile.min.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -45,10 +45,12 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
|
||||||
|
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
$("#fileuploader").uploadFile({
|
$("#fileuploader").uploadFile({
|
||||||
url: "fileupload",
|
url: "/api/uploadBookmarkFile",
|
||||||
multiple: true,
|
multiple: false,
|
||||||
dragDrop: true,
|
dragDrop: true,
|
||||||
fileName: "myfile",
|
fileName: "bookmark",
|
||||||
|
acceptFiles: "text/html",
|
||||||
|
maxFileSize: 10 * 1024 * 1024, // 最大10M
|
||||||
onSuccess: function(files, response, xhr, pd) {
|
onSuccess: function(files, response, xhr, pd) {
|
||||||
console.log(JSON.stringify(response[0]));
|
console.log(JSON.stringify(response[0]));
|
||||||
},
|
},
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -30,7 +30,7 @@
|
||||||
书签显示设置
|
书签显示设置
|
||||||
</form>
|
</form>
|
||||||
<form class="ui form" ng-show="form[2]">
|
<form class="ui form" ng-show="form[2]">
|
||||||
<div id="fileuploader">Upload</div>
|
<div id="fileuploader">点我上传</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
132
routes/api.js
132
routes/api.js
|
|
@ -3,6 +3,36 @@ var mysql = require('mysql');
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
var read = require('node-readability');
|
var read = require('node-readability');
|
||||||
var db = require('../database/db.js');
|
var db = require('../database/db.js');
|
||||||
|
var multer = require('multer');
|
||||||
|
|
||||||
|
var storage = multer.diskStorage({
|
||||||
|
destination: function(req, file, cb) {
|
||||||
|
cb(null, './uploads')
|
||||||
|
},
|
||||||
|
filename: function(req, file, cb) {
|
||||||
|
var now = new Date().format('yyyyMMddhhmmss')
|
||||||
|
if (req.session.user) {
|
||||||
|
cb(null, req.session.username + '-' + now + '.html')
|
||||||
|
} else {
|
||||||
|
cb(null, "UnknowUser" + '-' + now + '.html')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
var upload = multer({
|
||||||
|
storage: storage,
|
||||||
|
limits: {
|
||||||
|
fileSize: 10 * 1024 * 2014, // 最大值接受10M
|
||||||
|
},
|
||||||
|
fileFilter: function(req, file, cb) {
|
||||||
|
console.log("fileFilter file = ", file)
|
||||||
|
if (file.mimetype == "text/html'") {
|
||||||
|
return cb(null, true);
|
||||||
|
} else {
|
||||||
|
return cb(null, false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
api.post('/logout', function(req, res) {
|
api.post('/logout', function(req, res) {
|
||||||
var params = req.body.params;
|
var params = req.body.params;
|
||||||
|
|
@ -439,6 +469,104 @@ api.post('/addAdvice', function(req, res) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
api.post('/uploadBookmarkFile', upload.single('bookmark'), function(req, res) {
|
||||||
|
console.log('hello uploadBookmarkFile');
|
||||||
|
if (!req.session.user) {
|
||||||
|
res.send(401);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var file = req.file;
|
||||||
|
var bookmarks = [{
|
||||||
|
"url": "https://www.163.com/",
|
||||||
|
"name": "Bookmarks",
|
||||||
|
"add_date": "1432116178",
|
||||||
|
"tags": []
|
||||||
|
}, {
|
||||||
|
"url": "https://github.com/aponxi/npm-bookmark-parser",
|
||||||
|
"name": "aponxi/npm-bookmark-parser: Node plugin to parse Chrome bookmarks into usable JSON format, via javascript.",
|
||||||
|
"add_date": "1486615941",
|
||||||
|
"tags": ["测试栏目2", "测试栏目1"]
|
||||||
|
}, {
|
||||||
|
"url": "http://stackoverflow.com/questions/26673837/parsing-bookmark-html-in-node-js",
|
||||||
|
"name": "parsing bookmark.html in node.js - Stack Overflow",
|
||||||
|
"add_date": "1486614926",
|
||||||
|
"tags": ["测试栏目1"]
|
||||||
|
}, {
|
||||||
|
"url": "http://stackoverflow.com/",
|
||||||
|
"name": "dddddddddddddd",
|
||||||
|
"add_date": "1486614926",
|
||||||
|
"tags": ["测试栏目3"]
|
||||||
|
}];
|
||||||
|
|
||||||
|
var tagsName = ['测试栏目1', '测试栏目2', '测试栏目3'];
|
||||||
|
var userId = req.session.user.id;
|
||||||
|
var addTagNames = [];
|
||||||
|
|
||||||
|
db.getTags(userId)
|
||||||
|
// 先插入分类
|
||||||
|
.then((tags) => {
|
||||||
|
// 需要插入的书签是该用户在数据库不存在的书签
|
||||||
|
addTagNames = tagsName.filter((name) => {
|
||||||
|
for (var i = 0; i < tags.length; i++) {
|
||||||
|
if (tags[i].name.toLowerCase() === name.toLowerCase()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
return Promise.resolve(addTagNames);
|
||||||
|
})
|
||||||
|
.then((newTagNames) => {
|
||||||
|
if (newTagNames.length > 0) {
|
||||||
|
return db.addTags(userId, newTagNames)
|
||||||
|
} else {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(() => db.getTags(userId))
|
||||||
|
.then((allTags) => {
|
||||||
|
bookmarks.forEach((item, index) => {
|
||||||
|
var count = 0;
|
||||||
|
|
||||||
|
var bookmark = {};
|
||||||
|
bookmark.title = item.name;
|
||||||
|
bookmark.description = "";
|
||||||
|
bookmark.url = item.url;
|
||||||
|
bookmark.public = '1';
|
||||||
|
if (item.tags.length == 0) {
|
||||||
|
item.tags.push("未分类")
|
||||||
|
}
|
||||||
|
|
||||||
|
var tags = [];
|
||||||
|
item.tags.forEach((tag) => {
|
||||||
|
allTags.forEach((at) => {
|
||||||
|
if (at.name == tag) {
|
||||||
|
tags.push(at.id);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// 插入书签
|
||||||
|
db.addBookmark(userId, bookmark) // 插入书签
|
||||||
|
.then((bookmark_id) => {
|
||||||
|
db.delBookmarkTags(bookmark_id); // 不管3721,先删掉旧的分类
|
||||||
|
return bookmark_id;
|
||||||
|
}) // 将之前所有的书签分类信息删掉
|
||||||
|
.then((bookmark_id) => db.addTagsBookmarks(tags, bookmark_id)) // 插入分类
|
||||||
|
.then(() => db.updateLastUseTags(userId, tags)) // 更新最新使用的分类
|
||||||
|
.then(() => {
|
||||||
|
count++
|
||||||
|
}) // 运气不错
|
||||||
|
.catch((err) => console.log('uploadBookmarkFile addBookmark err', err)); // oops!
|
||||||
|
if ((index + 1) == bookmarks.length) {
|
||||||
|
// 通知前台
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch((err) => console.log('uploadBookmarkFile err', err));
|
||||||
|
res.json(file);
|
||||||
|
});
|
||||||
|
|
||||||
api.post('/addBookmark', function(req, res) {
|
api.post('/addBookmark', function(req, res) {
|
||||||
console.log('hello addBookmark', JSON.stringify(req.body));
|
console.log('hello addBookmark', JSON.stringify(req.body));
|
||||||
if (!req.session.user) {
|
if (!req.session.user) {
|
||||||
|
|
@ -449,6 +577,10 @@ api.post('/addBookmark', function(req, res) {
|
||||||
var userId = req.session.user.id;
|
var userId = req.session.user.id;
|
||||||
var tags = bookmark.tags;
|
var tags = bookmark.tags;
|
||||||
db.addBookmark(userId, bookmark) // 插入书签
|
db.addBookmark(userId, bookmark) // 插入书签
|
||||||
|
.then((bookmark_id) => {
|
||||||
|
db.delBookmarkTags(bookmark_id); // 不管3721,先删掉旧的分类
|
||||||
|
return bookmark_id;
|
||||||
|
}) // 将之前所有的书签分类信息删掉
|
||||||
.then((bookmark_id) => db.addTagsBookmarks(tags, bookmark_id)) // 插入分类
|
.then((bookmark_id) => db.addTagsBookmarks(tags, bookmark_id)) // 插入分类
|
||||||
.then(() => db.updateLastUseTags(userId, tags)) // 更新最新使用的分类
|
.then(() => db.updateLastUseTags(userId, tags)) // 更新最新使用的分类
|
||||||
.then(() => res.json({})) // 运气不错
|
.then(() => res.json({})) // 运气不错
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue