From: himetani_cafe Date: Tue, 26 Jan 2016 12:14:43 +0000 (+0900) Subject: [Develop and manual Test] API endpoint (post) /api/v1/fileUpload X-Git-Tag: v0.3.0p0020 X-Git-Url: http://git.osdn.net/view?p=eos%2Fzephyr.git;a=commitdiff_plain;h=d9faf4befdc87347d89514f566fc6fb33ccc9cd4;hp=d46bddbc371de708a21b976ffcc0e37550de1bfc [Develop and manual Test] API endpoint (post) /api/v1/fileUpload ファイル属性を含むFormオブジェクトpost Form { parentDirectory: [string], name: [Blob], . . . nameN: [Blob] } ファイルのアップロードに成功すると、アップロードに成功したファイルの情報を返す。 ファイルのアップロードに失敗すると、エラーの情報を返す。 --- diff --git a/.gitignore b/.gitignore index 3199291..9458554 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ user-specific-files/meta/ user-specific-files/workspace/ user-specific-files/workspace.debug user-specific-files/db/ +user-specific-files/tmp/ diff --git a/server/api/v1/fileUpload/index.js b/server/api/v1/fileUpload/index.js index 84d3b88..344fc76 100644 --- a/server/api/v1/fileUpload/index.js +++ b/server/api/v1/fileUpload/index.js @@ -4,36 +4,82 @@ var express = require('express'); var router = express.Router() var path = require('path') var formidable = require('formidable') -var DB = require(__dirname + '/../../../../server/class/DB').instance; +var db = require(__dirname + '/../../../../server/class/DB').instance; +var uuid = require('node-uuid'); +var fs = require('fs'); router.post('/', function(req, res) { var form = new formidable.IncomingForm(); - if(process.env['NODE_ENV'] === 'debug') { - form.uploadDir = __dirname + '/../../../../user-specific-files/workspace.debug'; - } else { - form.uploadDir = __dirname + '/../../../../user-specific-files/workspace'; - } - - DB.createFile('hoge.txt','/') - .then(function(r) { - console.log(r); + var filesInfo = []; + + form.uploadDir = __dirname + '/../../../../user-specific-files/tmp'; + + form.on('fileBegin', function(parentDirectory, file) { + }); + + form.on('error', function(err) { + console.errro(err); + var i = { + status: 'error', + message: err + } + res.send(i); + }); + + + form.parse(req, function(err, fields, files) { + var workspace; + var parentDirectory = fields['parentDirectory']; + if(process.env['NODE_ENV'] === 'debug') { + workspace = __dirname + '/../../../../user-specific-files/workspace.debug/'; + } else { + workspace = __dirname + '/../../../../user-specific-files/workspace/'; + } + var promises = []; + Object.keys(files).forEach(function(key) { + var file = files[key]; + var fileName = file.name; + var tmpPath = file.path; + var info = { + status: null, + parentDirectory: parentDirectory, + fileName: fileName, + tmpPath: tmpPath, + fileId: null + }; + + filesInfo.push(info); + promises.push(db.createFile(fileName, parentDirectory)); // file作成に成功したらresolve, 失敗したらreject + }); + + Promise.all(promises) + .catch(function(err) { + filesInfo.forEach(function(fileInfo) { + fs.unlinkSync(fileInfo.tmpPath); + }); + + var info = { + status: 'error', + messag: err.message + }; + + res.send(info); + }) + .then(function(fileIds) { + fileIds.forEach(function(fileId, i) { + filesInfo[i].status = 'success'; + filesInfo[i].fileId = fileId; + fs.renameSync(filesInfo[i].tmpPath, workspace + fileId); + delete tmpPaths[i]; + }) + res.send(responsesInfo); + }); + }); + + form.on('end', function() { + }); - /* - form.parse(req, function(err, fields, files) { - var parentDirectory = fields['parentDirectory']; - var keys = Object.keys(files); - keys.forEach(function(f) { - db.createFile(files[f].name, parentDirectory) - .then(function(path) { - files[f].path = form.uploadDir + '/' + path; - console.log(files[f].path); - }); - }); - res.send("done"); - }); - */ }); module.exports = router; - diff --git a/server/app.js b/server/app.js index bc9f28e..e410f12 100644 --- a/server/app.js +++ b/server/app.js @@ -15,16 +15,17 @@ require('./routes')(app); // DBのコンストラクタを実行 var DB = require('./class/DB').instance; DB.init() +.then(function() { + return DB.test2(); +}) .then(function(methods) { - console.log(DB); -}); + var server = app.listen(config.port, config.ip, function () { + console.log('Zephyr listening at http://%s:%s', config.ip, config.port); + console.log(app.get('env')) + }); -var server = app.listen(config.port, config.ip, function () { - console.log('Zephyr listening at http://%s:%s', config.ip, config.port); - console.log(app.get('env')) + var io = require('socket.io').listen(server); + require('./ws')(io); }); -var io = require('socket.io').listen(server); -require('./ws')(io); - //exports = module.exports = app;