OSDN Git Service

[Develop and manual Test] API endpoint (post) /api/v1/fileUpload
[eos/zephyr.git] / server / api / v1 / fileUpload / index.js
1 'use strict';
2
3 var express    = require('express');
4 var router     = express.Router()
5 var path       = require('path')
6 var formidable = require('formidable')
7 var db = require(__dirname + '/../../../../server/class/DB').instance;
8 var uuid = require('node-uuid');
9 var fs = require('fs');
10
11 router.post('/', function(req, res) {
12     var form = new formidable.IncomingForm();
13     var filesInfo = [];
14
15     form.uploadDir = __dirname + '/../../../../user-specific-files/tmp';
16     
17     form.on('fileBegin', function(parentDirectory, file) {
18     });
19  
20     form.on('error', function(err) {
21         console.errro(err);
22         var i = {
23             status: 'error',
24             message: err
25         }
26         res.send(i);
27     });
28
29
30     form.parse(req, function(err, fields, files) {
31         var workspace;
32         var parentDirectory = fields['parentDirectory'];
33         if(process.env['NODE_ENV'] === 'debug') {
34             workspace = __dirname + '/../../../../user-specific-files/workspace.debug/'; 
35         } else {
36             workspace = __dirname + '/../../../../user-specific-files/workspace/'; 
37         }
38         var promises = [];
39         Object.keys(files).forEach(function(key) {
40             var file = files[key];
41             var fileName = file.name;
42             var tmpPath = file.path;
43             var info = {
44                 status: null,
45                 parentDirectory: parentDirectory,
46                 fileName: fileName,
47                 tmpPath: tmpPath,
48                 fileId: null
49             };
50             
51             filesInfo.push(info);
52             promises.push(db.createFile(fileName, parentDirectory)); // file作成に成功したらresolve, 失敗したらreject
53         });
54
55         Promise.all(promises)
56         .catch(function(err) {
57             filesInfo.forEach(function(fileInfo) {
58                 fs.unlinkSync(fileInfo.tmpPath);
59             });
60
61             var info = {
62                 status: 'error',
63                 messag: err.message
64             };
65
66             res.send(info);
67         })
68         .then(function(fileIds) {
69             fileIds.forEach(function(fileId, i) { 
70                 filesInfo[i].status = 'success';
71                 filesInfo[i].fileId = fileId;
72                 fs.renameSync(filesInfo[i].tmpPath, workspace + fileId);
73                 delete tmpPaths[i];
74             })
75             res.send(responsesInfo);
76         });
77     });
78
79     form.on('end', function() {
80         
81     });
82
83 });
84
85 module.exports = router;