完成文件上传,将文件里面的内容插入到数据库里面
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 session = require('express-session');
|
||||
var mongoStore = require('connect-mongo')(session);
|
||||
var mount_uploadify = require('uploadify');
|
||||
|
||||
var routes = require('./routes/index');
|
||||
var users = require('./routes/users');
|
||||
|
|
@ -43,16 +42,6 @@ app.use(session({
|
|||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
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('/users', users);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
var mysql = require('mysql');
|
||||
var client = mysql.createConnection({
|
||||
host: '127.0.0.1',
|
||||
user: 'test', // mysql的账号
|
||||
user: 'test', // mysql的账号
|
||||
password: '123456', // mysql 的密码
|
||||
database: 'mybookmarks',
|
||||
multipleStatements: true,
|
||||
|
|
@ -42,15 +42,27 @@ var db = {
|
|||
// });
|
||||
|
||||
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) {
|
||||
client.query(sql, (err, result) => {
|
||||
client.query(selectSql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result.insertId);
|
||||
if (result.length >= 1) {
|
||||
resolve(result[0].id);
|
||||
} else {
|
||||
client.query(insertSql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result.insertId);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -294,7 +306,7 @@ db.getAdvices = function(params) {
|
|||
|
||||
db.addAdvice = function(params) {
|
||||
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) {
|
||||
client.query(sql, (err, result) => {
|
||||
if (err) {
|
||||
|
|
@ -330,13 +342,17 @@ db.addTags = function(user_id, tags_name) {
|
|||
sql += "('" + user_id + "', '" + name + "')";
|
||||
});
|
||||
return new Promise(function(resolve, reject) {
|
||||
client.query(sql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result.insertId);
|
||||
}
|
||||
});
|
||||
if (tags_name.length == 0) {
|
||||
reject("tags_name is empty");
|
||||
} else {
|
||||
client.query(sql, (err, result) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(result.insertId);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
"express": "~4.13.4",
|
||||
"express-session": "^1.14.1",
|
||||
"morgan": "~1.7.0",
|
||||
"multer": "^1.3.0",
|
||||
"mysql": "^2.11.1",
|
||||
"node-readability": "^2.2.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/toastr.min.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="/">
|
||||
</head>
|
||||
<body ng-app="bookmarkApp">
|
||||
|
|
@ -55,6 +55,6 @@
|
|||
<script src="/scripts/controllers/search-controller.js"></script>
|
||||
<script src="/scripts/externe/semantic.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>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -45,10 +45,12 @@ app.controller('settingsCtr', ['$scope', '$stateParams', '$filter', '$state', '$
|
|||
|
||||
setTimeout(function() {
|
||||
$("#fileuploader").uploadFile({
|
||||
url: "fileupload",
|
||||
multiple: true,
|
||||
url: "/api/uploadBookmarkFile",
|
||||
multiple: false,
|
||||
dragDrop: true,
|
||||
fileName: "myfile",
|
||||
fileName: "bookmark",
|
||||
acceptFiles: "text/html",
|
||||
maxFileSize: 10 * 1024 * 1024, // 最大10M
|
||||
onSuccess: function(files, response, xhr, pd) {
|
||||
console.log(JSON.stringify(response[0]));
|
||||
},
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -30,7 +30,7 @@
|
|||
书签显示设置
|
||||
</form>
|
||||
<form class="ui form" ng-show="form[2]">
|
||||
<div id="fileuploader">Upload</div>
|
||||
<div id="fileuploader">点我上传</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
132
routes/api.js
132
routes/api.js
|
|
@ -3,6 +3,36 @@ var mysql = require('mysql');
|
|||
var crypto = require('crypto');
|
||||
var read = require('node-readability');
|
||||
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) {
|
||||
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) {
|
||||
console.log('hello addBookmark', JSON.stringify(req.body));
|
||||
if (!req.session.user) {
|
||||
|
|
@ -449,6 +577,10 @@ api.post('/addBookmark', function(req, res) {
|
|||
var userId = req.session.user.id;
|
||||
var tags = bookmark.tags;
|
||||
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(() => res.json({})) // 运气不错
|
||||
|
|
|
|||
Loading…
Reference in New Issue