Project

General

Profile

« Previous | Next » 

Revision 55705

UploadService: Add method for uploading image, delete file and download file. The previous upload CSV method remains with the same functionality.

View differences:

uploadService.js
2 2
var bodyParser = require("body-parser");
3 3
var multer = require("multer");
4 4
var app = express();
5
var cors = require('cors')
5
var cors = require('cors');
6
var http = require("http");
7

  
8
var auth = 'http://scoobydoo.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/users/getUserInfo?accessToken=';
9

  
10
var storage = multer.diskStorage({
11
    destination: function (req, file, cb) {
12
        cb(null, 'uploads')
13
    },
14
    filename: function (req, file, cb) {
15
        if(req.params.id) {
16
            cb(null, req.params.id + '-' + new Date().getTime() + '.' + file.originalname.split('.').pop());
17
        } else {
18
            cb(null, file.originalname);
19
        }
20
    }
21
});
22

  
23
var upload = multer({ storage: storage })
6 24
app.use(cors());
7 25

  
8 26
app.use(bodyParser.json());
9
app.use(bodyParser.urlencoded({ extended: true }));
27
app.use(bodyParser.urlencoded({extended: true}));
10 28

  
11
app.use(function(req, res, next) {
29
app.use(function (req, res, next) {
12 30
    res.header("Access-Control-Allow-Origin", "*");
13 31
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
14 32
    next();
15 33
});
16 34

  
17
app.post("/upload", multer({dest: "/home/argirok/projects/openaire/uoa-services-portal/trunk/services/upload/uploads/"}).array("uploads[]", 12), function(req, res) {
18
  var filepath ="/"+req.files[0].path;
19
  console.log(req.files[0]);
20
  if (req.files[0].mimetype != 'text/csv') {
21
      console.error("No proper file type");
22
      res.status(500).send(getResponse(500,"No proper file type")) ;
23
  }else{
24
    //send file
25
    res.sendFile(filepath);
26
  }
27
  var fs = require('fs');
28
  fs.stat(filepath, function (err, stats) {
29
  console.log(stats);//here we got all information of file in stats variable
35
app.post("/upload", upload.array("uploads[]", 12), function (req, res) {
36
    var filepath = "./" + req.files[0].path;
37
    if (req.files[0].mimetype != 'text/csv') {
38
        console.error("No proper file type");
39
        res.status(500).send(getResponse(500, "No proper file type"));
40
    } else {
41
        //send file
42
        res.download(filepath);
43
    }
44
    deleteFile(filepath);
30 45

  
31
  if (err) {
32
      return console.error(err);
33
  }
46
});
34 47

  
35
  fs.unlink(filepath,function(err){
36
       if(err) return console.log(err);
37
       console.log('file deleted successfully');
38
  });
48
app.post('/upload/:id', upload.single('photo'), (req, res) => {
49
    const token = req.headers['x-xsrf-token'];
50
    const file = req.file;
51
    const filepath = "./" + file.path;
52
    if(!token) {
53
        res.status(401).send(getResponse(401, "Unauthorized"));
54
        deleteFile(filepath);
55
    }
56
    else if (!file || (file.mimetype != 'image/jpeg' && file.mimetype != 'image/png')) {
57
        res.status(500).send(getResponse(500, "No image file type"));
58
        deleteFile(filepath);
59
    }
60
    else {
61
        http.get(auth+token, function (resp) {
62
            var responseString = "";
63
            resp.on("data", function (data) {
64
                responseString += data;
65
            });
66
            resp.on("end", function () {
67
                var result = JSON.parse(responseString);
68
                console.log(result);
69
                if(result.error) {
70
                    res.status(401).send(getResponse(401, "Unauthorized"));
71
                    deleteFile(filepath);
72
                } else {
73
                    // if user id contains id param keep file and send information, else delete it.
74
                    if(result.sub.indexOf(req.params.id) !== -1) {
75
                        file.filename = file.filename;
76
                        res.send(file);
77
                    } else {
78
                        res.status(401).send(getResponse(401, "Unauthorized"));
79
                        deleteFile(filepath);
80
                    }
81
                }
82
            });
83
        });
84
    }
85

  
39 86
});
40 87

  
88
app.get('/download/:filename', function (req, res) {
89
   res.download('./uploads/' + req.params.filename);
41 90
});
42
app.get('/get/d6bd36a06762e2f0da891f9670fcb2b0', function(req, res) {
43
  res.sendFile('uploads/d6bd36a06762e2f0da891f9670fcb2b0')
44
})
45
var server = app.listen(8000, function() {
91

  
92
app.delete('/delete/:filename', function (req, res) {
93
    const token = req.headers['x-xsrf-token'];
94
    if(!token) {
95
        res.status(401).send(getResponse(401, "Unauthorized"));
96
    } else {
97
        http.get(auth+token, function (resp) {
98
            var responseString = "";
99
            resp.on("data", function (data) {
100
                responseString += data;
101
            });
102
            resp.on("end", function () {
103
                var result = JSON.parse(responseString);
104
                console.log(result);
105
                if(result.error) {
106
                    res.status(401).send(getResponse(401, "Unauthorized"));
107
                } else {
108
                    // if user id is on filename delete file else unauthorized.
109
                    if(result.sub.indexOf(req.params.filename.split('-')[0]) !== -1) {
110
                        deleteFile('./uploads/' + req.params.filename);
111
                        return res.status(200).send(getResponse(200, "File Deleted Successfully"));
112
                    } else {
113
                        res.status(401).send(getResponse(401, "Unauthorized"));
114
                    }
115
                }
116
            });
117
        });
118
    }
119
});
120

  
121
const server = app.listen(8000, function () {
46 122
    console.log("Listening on port %s...", server.address().port);
47 123
});
48
function getResponse(code, message){
49
  var response ={};
50
  response["code"]=code;
51
  response["message"]=message;
52
  return response;
53 124

  
125
function getResponse(code, message) {
126
    var response = {};
127
    response["code"] = code;
128
    response["message"] = message;
129
    return response;
54 130
}
131

  
132
function deleteFile(filepath) {
133
    const fs = require('fs');
134
    fs.stat(filepath, function (err, stats) {
135
        console.log(stats); //here we got all information of file in stats variable
136

  
137
        if (err) {
138
            return console.error(err);
139
        }
140

  
141
        fs.unlink(filepath, function (err) {
142
            if (err) return console.log(err);
143
            console.log('file deleted successfully');
144
        });
145
    });
146
}
147

  

Also available in: Unified diff