完成文件上传,将文件里面的内容插入到数据库里面

This commit is contained in:
luchenqun 2017-02-10 14:04:04 +08:00
parent c6cfbe69b1
commit 1f6c7bb2fb
9 changed files with 323 additions and 29 deletions

11
app.js
View File

@ -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);

View File

@ -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 {
if (result.length >= 1) {
resolve(result[0].id);
} else {
client.query(insertSql, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result.insertId);
}
});
}
}
});
});
};
@ -330,6 +342,9 @@ db.addTags = function(user_id, tags_name) {
sql += "('" + user_id + "', '" + name + "')";
});
return new Promise(function(resolve, reject) {
if (tags_name.length == 0) {
reject("tags_name is empty");
} else {
client.query(sql, (err, result) => {
if (err) {
reject(err);
@ -337,6 +352,7 @@ db.addTags = function(user_id, tags_name) {
resolve(result.insertId);
}
});
}
});
};

View File

@ -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",

View File

@ -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;
}

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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({})) // 运气不错