diff --git a/node_modules/api.js b/node_modules/api.js
index 1e6ffde2..6c249376 100644
--- a/node_modules/api.js
+++ b/node_modules/api.js
@@ -86,13 +86,17 @@ var Api = {
fs.writeFile('/Users/life/Desktop/aa.png', resp.body);
});
},
+ // 测试
uploadImage: function() {
var data = {
foo: 'bar',
- image: { file: '/Users/life/Desktop/aa.png', content_type: 'image/png' }
+ cc: [1,2,3,3],
+ dd: {name: 'life', age: 18},
+ image: { file: '/Users/life/Desktop/imageplus.png', content_type: 'image/png' }
}
needle.post('http://localhost/phpinfo.php', data, { multipart: true }, function(err, resp, body) {
// needle will read the file and include it in the form-data as binary
+ console.log(resp.body);
});
},
getSyncNotebooks: function(afterUsn, maxEntry, callback) {
@@ -338,7 +342,8 @@ var Api = {
});
},
- // 添加
+ // 添加笔记
+ // 要把文件也发送过去
addNote: function(note, callback) {
var me = this;
// note.NotebookId是本的, 要得到远程的
diff --git a/node_modules/common.js b/node_modules/common.js
index fd9b1253..8486c6c9 100644
--- a/node_modules/common.js
+++ b/node_modules/common.js
@@ -1,6 +1,5 @@
var fs = require('fs');
var User = require('user');
-var File = require('file');
var Evt = require('evt');
var ObjectId = require('objectid');
@@ -35,56 +34,6 @@ var Common = {
}
return false;
},
- // FileReaderWeb 是 web上的FileReader, 可能与nodejs这个有冲突
- pasteImage: function(event, FileReaderWeb, callback) {
- var me = this;
- var items = (event.clipboardData || event.originalEvent.clipboardData).items; // 可能有多个file, 找到属于图片的file
- // find pasted image among pasted items
- var blob;
- for (var i = 0; i < items.length; i++) {
- if (items[i].type.indexOf("image") === 0) {
- blob = items[i].getAsFile();
- }
- }
- // console.log("paste images");
- // console.log(blob);
- // load image if there is a pasted image
- if (blob) {
- // console.log("??");
- var reader = new FileReaderWeb();
- // console.log(">>")
- // console.log(reader);
- // console.log(">>")
- reader.onloadend = function() {
- console.log(reader);
- // 这个事件在读取结束后,无论成功或者失败都会触发
- if (reader.error) {
- console.log(reader.error);
- } else {
- }
- }
- reader.onload = function(e) {
- // 上传之
- // log('result');
- // log(reader.result);
- var ret = reader.result
- ret = ret.replace(/^data:image\/\w+;base64,/, "")
- // log(User.getCurUserImagesPath());
- var filename = me.uuid() + '.png';
- fs.writeFile(User.getCurUserImagesPath() + '/' + filename, new Buffer(ret, 'base64'), function(err) {
- if(err) {
- log(err);
- return;
- }
- // 保存
- var relativePath = User.getCurUserImagesAppPath() + '/' + filename;
- File.addImage(relativePath);
-
- callback && callback('app://leanote/' + relativePath);
- });
- };
- reader.readAsDataURL(blob);
- }
- },
+
};
module.exports = Common;
diff --git a/node_modules/evt.js b/node_modules/evt.js
index 3a8ed2f4..e33ebe41 100644
--- a/node_modules/evt.js
+++ b/node_modules/evt.js
@@ -3,6 +3,11 @@ var User = require('user');
function log(o) {console.log(o)}
var Evt = {
+ port: 8008,
+ localUrl: 'http://127.0.0.1:8008',
+ getImageLocalUrl: function(fileId) {
+ return this.localUrl + '/api/file/getImage?fileId=' + fileId;
+ },
// 项目绝对地址
getBasePath: function() {
return process.cwd();
diff --git a/node_modules/file.js b/node_modules/file.js
index 051c34d6..fa94d016 100644
--- a/node_modules/file.js
+++ b/node_modules/file.js
@@ -21,7 +21,6 @@ type File struct {
Path string `Path` // the file path
IsDefaultAlbum bool `IsDefaultAlbum`
CreatedTime time.Time `CreatedTime`
-
FromFileId bson.ObjectId `bson:"FromFileId,omitempty"` // copy from fileId, for collaboration
}
@@ -29,6 +28,62 @@ type File struct {
// 文件服务
var File = {
+
+ // FileReaderWeb 是 web上的FileReader, 可能与nodejs这个有冲突
+ pasteImage: function(event, FileReaderWeb, callback) {
+ var me = this;
+ var items = (event.clipboardData || event.originalEvent.clipboardData).items; // 可能有多个file, 找到属于图片的file
+ // find pasted image among pasted items
+ var blob;
+ for (var i = 0; i < items.length; i++) {
+ if (items[i].type.indexOf("image") === 0) {
+ blob = items[i].getAsFile();
+ }
+ }
+ // console.log("paste images");
+ // console.log(blob);
+ // load image if there is a pasted image
+ if (blob) {
+ // console.log("??");
+ var reader = new FileReaderWeb();
+ // console.log(">>")
+ // console.log(reader);
+ // console.log(">>")
+ reader.onloadend = function() {
+ console.log(reader);
+ // 这个事件在读取结束后,无论成功或者失败都会触发
+ if (reader.error) {
+ console.log(reader.error);
+ } else {
+ }
+ }
+ reader.onload = function(e) {
+ // 上传之
+ // log('result');
+ // log(reader.result);
+ var ret = reader.result
+ ret = ret.replace(/^data:image\/\w+;base64,/, "")
+ // log(User.getCurUserImagesPath());
+ var filename = Common.uuid() + '.png';
+ fs.writeFile(User.getCurUserImagesPath() + '/' + filename, new Buffer(ret, 'base64'), function(err) {
+ if(err) {
+ log(err);
+ return;
+ }
+ // 保存
+ var relativePath = User.getCurUserImagesAppPath() + '/' + filename;
+
+ // 保存到数据库中
+ File.addImage(relativePath, function(newImg) {
+ callback && callback(Evt.getImageLocalUrl(newImg.FileId));
+ // callback && callback('app://leanote/' + relativePath);
+ });
+ });
+ };
+ reader.readAsDataURL(blob);
+ }
+ },
+
// path是相对于项目路径
addImage: function(path, callback) {
var me = this;
@@ -36,7 +91,7 @@ var File = {
me._addImage(Common.objectId(), absolutePath, callback);
},
- _addImage: function(fileId, absolutePath, callback) {
+ _addImage: function(fileId, absolutePath, callback, isForce) {
// var absolutePath = Evt.getBasePath() + '/' + path;
// 得到文件大小
var stat = fs.statSync(absolutePath);
@@ -46,13 +101,18 @@ var File = {
var ext = names[names.length-1];
var image = {
FileId: fileId,
+ ServerFileId: '',
Path: absolutePath,
Name: name,
UserId: User.getCurActiveUserId(),
Title: name,
Type: ext,
Size: stat && stat.size,
+ IsDirty: true, // 本地是新添加的
CreatedTime: new Date()
+ };
+ if(isForce) {
+ image.ServerFileId = fileId;
}
Images.insert(image, function(err, doc) {
log(err);
@@ -64,16 +124,22 @@ var File = {
})
},
+ // 从服务器上把文件download下来后
+ // 这里的fileId是serverFileId, 本地的FileId也保存为该值
addImageForce: function(fileId, path, callback) {
var me = this;
// 先删除之, 可能是本地有记录, 但是文件没了
Images.remove({FileId: fileId}, function() {
- me._addImage(fileId, path, callback);
+ me._addImage(fileId, path, callback, true);
});
},
// 获取图片本地路径
+ // 通过FileId可ServerFileId来查找
+ // 因为图片的链接 有可能是本地添加的, 又有可能是远程的
+ // 如果是远程的, FileId == ServerFileId, 是一样的, 所以不要Or
getImageLocalPath: function(fileId, callback) {
+ // Images.findOne({$or: {FileId: fileId}, {ServerFileId: fileId}}, function(err, doc) {
Images.findOne({FileId: fileId}, function(err, doc) {
if(!err && doc && doc.Path) { // FileLocalPath是相对于项目的路径
callback(true, doc.Path);
@@ -81,6 +147,17 @@ var File = {
callback(false, false);
}
});
+ },
+
+ // 得到fileIds所有的images, 为了发送到服务器上
+ getAllImages: function(fileIds, callback) {
+ var me = this;
+ Images.find({$or:[{FileId: {$in: fileIds}}, {ServerFileId: {$in: fileIds}}]}, function(err, images) {
+ if(err || !images) {
+ return callback(false);
+ }
+ callback(images);
+ });
}
};
diff --git a/node_modules/note.js b/node_modules/note.js
index 42b45ebf..a60038f7 100644
--- a/node_modules/note.js
+++ b/node_modules/note.js
@@ -1,5 +1,7 @@
var async = require('async');
var db = require('db');
+var File = require('file');
+var Evt = require('evt');
var User = require('user');
var Notebook = require('notebook');
var Tag = require('tag');
@@ -513,16 +515,67 @@ var Note = {
// 获得用户修改的笔记
getDirtyNotes: function(callback) {
+ var me = this;
Notes.find({UserId: User.getCurActiveUserId(), IsDirty: true}, function(err, notes) {
if(err) {
log(err);
return callback && callback(false);
} else {
- callback(notes);
+ // 每一个笔记得到图片, 附件信息和数据
+ async.eachSeries(notes, function(note, cb) {
+ me.getNoteFiles(note.NoteId, note.Content, function(files) {
+ note.Files = files || [];
+ cb();
+ })
+ }, function() {
+ callback(notes);
+ })
}
});
},
+ // 得到笔记的文件
+ getNoteFiles: function(noteId, content, callback) {
+ // 得到图片信息, 通过内容
+ // http://localhost:8002/api/file/getImage?fileId=xxxxxx, 得到fileId, 查询数据库, 得到图片
+ // console.log(content);
+ // console.log(Evt.localUrl + '/api/file/getImage?fileId=([0-9a-zA-Z]{24})');
+ var reg = new RegExp(Evt.localUrl + "/api/file/getImage\\?fileId=([0-9a-zA-Z]{24})", 'g');
+ var fileIds = [];
+ // var fileIdsMap = {}; // 防止多个
+ while((result = reg.exec(content)) != null) {
+ // result = [所有, 子表达式1, 子表达式2]
+ if(result && result.length > 1) {
+ // console.log(result);
+ var fileId = result[1];
+ fileIds.push(fileId);
+ }
+ }
+ var files = []; // {localFileId: "must", fileId: "", hasBody: true, filename: "xx.png"}
+ if(fileIds.length > 0) {
+ // 得到所有的图片
+ File.getAllImages(fileIds, function(images) {
+ callback(images);
+ /*
+ if(!images) {
+ return;
+ }
+ for(var i in images) {
+ var image = images[i];
+ files.push({
+ localFileId: image.FileId,
+ fileId: image.ServerFileId,
+ hasBody: image.IsDirty,
+ filename: image.Name,
+ });
+ }
+ */
+ });
+ } else {
+ callback(false);
+ }
+ },
+
// 在send delete笔记时成功
setNotDirty: function(noteId) {
Notes.update({NoteId: noteId}, {$set:{IsDirty: false}})
diff --git a/node_modules/server.js b/node_modules/server.js
index 690a1367..7656c4f3 100644
--- a/node_modules/server.js
+++ b/node_modules/server.js
@@ -61,7 +61,6 @@ var Server = {
return false;
}
-
var realPath = basePath + pathname;
var ext = path.extname(realPath);
ext = ext ? ext.slice(1) : 'unknown';
diff --git a/note.html b/note.html
index e16a8a2a..22843e21 100755
--- a/note.html
+++ b/note.html
@@ -22,7 +22,12 @@
-
+