OSDN Git Service

[Develop and manual Test] API endpoint (post) /api/v1/fileUpload v0.3.0p0020
authorhimetani_cafe <fumifumi@yasunaga-lab.bio.kyutech.ac.jp>
Tue, 26 Jan 2016 12:14:43 +0000 (21:14 +0900)
committerhimetani_cafe <fumifumi@yasunaga-lab.bio.kyutech.ac.jp>
Tue, 26 Jan 2016 12:14:43 +0000 (21:14 +0900)
    ファイル属性を含むFormオブジェクトpost
    Form
    {
        parentDirectory: [string],
        name: [Blob],
        .
        .
        .
        nameN: [Blob]
    }
    ファイルのアップロードに成功すると、アップロードに成功したファイルの情報を返す。
    ファイルのアップロードに失敗すると、エラーの情報を返す。

.gitignore
server/api/v1/fileUpload/index.js
server/app.js

index 3199291..9458554 100644 (file)
@@ -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/
index 84d3b88..344fc76 100644 (file)
@@ -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;
-
index bc9f28e..e410f12 100644 (file)
@@ -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;