From d9faf4befdc87347d89514f566fc6fb33ccc9cd4 Mon Sep 17 00:00:00 2001 From: himetani_cafe Date: Tue, 26 Jan 2016 21:14:43 +0900 Subject: [PATCH] =?utf8?q?[Develop=20and=20manual=20Test]=20API=20endpoint?= =?utf8?q?=20(post)=20/api/v1/fileUpload=20=20=20=20=20=E3=83=95=E3=82=A1?= =?utf8?q?=E3=82=A4=E3=83=AB=E5=B1=9E=E6=80=A7=E3=82=92=E5=90=AB=E3=82=80F?= =?utf8?q?orm=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88post=20?= =?utf8?q?=20=20=20=20Form=20=20=20=20=20{=20=20=20=20=20=20=20=20=20paren?= =?utf8?q?tDirectory:=20[string],=20=20=20=20=20=20=20=20=20name:=20[Blob]?= =?utf8?q?,=20=20=20=20=20=20=20=20=20.=20=20=20=20=20=20=20=20=20.=20=20?= =?utf8?q?=20=20=20=20=20=20=20.=20=20=20=20=20=20=20=20=20nameN:=20[Blob]?= =?utf8?q?=20=20=20=20=20}=20=20=20=20=20=E3=83=95=E3=82=A1=E3=82=A4?= =?utf8?q?=E3=83=AB=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC?= =?utf8?q?=E3=83=89=E3=81=AB=E6=88=90=E5=8A=9F=E3=81=99=E3=82=8B=E3=81=A8?= =?utf8?q?=E3=80=81=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC=E3=83=89?= =?utf8?q?=E3=81=AB=E6=88=90=E5=8A=9F=E3=81=97=E3=81=9F=E3=83=95=E3=82=A1?= =?utf8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=94?= =?utf8?q?=E3=81=99=E3=80=82=20=20=20=20=20=E3=83=95=E3=82=A1=E3=82=A4?= =?utf8?q?=E3=83=AB=E3=81=AE=E3=82=A2=E3=83=83=E3=83=97=E3=83=AD=E3=83=BC?= =?utf8?q?=E3=83=89=E3=81=AB=E5=A4=B1=E6=95=97=E3=81=99=E3=82=8B=E3=81=A8?= =?utf8?q?=E3=80=81=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AE=E6=83=85=E5=A0=B1?= =?utf8?q?=E3=82=92=E8=BF=94=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + server/api/v1/fileUpload/index.js | 96 +++++++++++++++++++++++++++++---------- server/app.js | 17 +++---- 3 files changed, 81 insertions(+), 33 deletions(-) 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; -- 2.11.0