Files
desktop-app/node_modules/leanote_protocol.js
2015-09-24 13:31:53 +08:00

109 lines
2.6 KiB
JavaScript

// 为了显示图片
// leanote://api/file/getImage?fileId=xxx
//
//
// 没用!!! 因为protocal不支持异步
// https://github.com/atom/electron/issues/410
var protocol = require('protocol');
var Evt = require('evt');
var Common = require('common');
var File = require('file');
var Api = require('api');
var db = require('db');
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var Server = {
mime: {
"css": "text/css",
"gif": "image/gif",
"html": "text/html",
"ico": "image/x-icon",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"js": "text/javascript",
"json": "application/json",
"pdf": "application/pdf",
"png": "image/png",
"svg": "image/svg+xml",
"swf": "application/x-shockwave-flash",
"tiff": "image/tiff",
"txt": "text/plain",
"wav": "audio/x-wav",
"wma": "audio/x-ms-wma",
"wmv": "video/x-ms-wmv",
"xml": "text/xml"
},
router: function(request) {
var me = this;
var pathname = url.parse(request.url).pathname;
while(pathname[0] == '/') {
pathname = pathname.substr(1);
}
if(pathname == 'api/file/getImage') {
return me.getImage(request, response);
} else {
response.end();
return false;
}
},
e404: function(res) {
var me = this;
res.writeHead(404, {
'Content-Type': 'text/plain'
});
res.write("This request URL " + me._req.url + " was not found on this server.");
res.end();
},
// 返回图片
retImage: function(filePath, res) {
var me = this;
var ext = path.extname(filePath);
ext = ext ? ext.slice(1) : 'unknown';
filePath = filePath + '';
fs.readFile(filePath, "binary", function (err, file) {
if (err) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end();
} else {
var contentType = me.mime[ext] || "text/plain";
res.writeHead(200, {'Content-Type': contentType});
res.write(file, "binary");
res.end();
}
});
},
getImage: function(req, res) {
var me = this;
// fileId
var fileId = url.parse(req.url, true).query['fileId'];
if(!fileId) {
return me.e404(res);
}
File.getImage(fileId, function(fileLocalPath) {
if(path) {
return me.retImage(fileLocalPath, res);
} else {
return me.e404(res);
}
})
}
};
protocol.registerProtocol('leanote', function(request) {
var url = request.url.substr(7);
return new protocol.RequestFileJob(path.normalize(__dirname + '/' + url));
});