Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 39536
1
###
2
Upload form handler
3
###
4
5
fs = require('fs')
6
async = require('async')
7
mkdirp = require('mkdirp')
8
formidable = require('formidable')
9
misc = require('smc-util/misc')
10
11
exports.upload_endpoint = (express, logger) ->
12
logger?.debug("upload_endpoint conf")
13
14
router = express.Router()
15
16
router.get '/.smc/upload', (req, res) ->
17
logger?.debug("upload GET")
18
res.send("hello")
19
20
router.post '/.smc/upload', (req, res) ->
21
dbg = (m...) -> logger?.debug("upload POST ", m...)
22
# See https://github.com/felixge/node-formidable; user uploaded a file
23
dbg()
24
25
# See http://stackoverflow.com/questions/14022353/how-to-change-upload-path-when-use-formidable-with-express-in-node-js
26
options =
27
uploadDir : process.env.HOME + '/' + req.query.dest_dir
28
keepExtensions : true
29
form = new formidable.IncomingForm(options)
30
async.series([
31
(cb) ->
32
# ensure target path exists
33
mkdirp(options.uploadDir, cb)
34
(cb) ->
35
form.parse req, (err, fields, files) ->
36
if err or not files.file? or not files.file.path? or not files.file.name?
37
cb(err)
38
return
39
dbg("upload of '#{files.file.name}' to '#{files.file.path}' worked")
40
dest = process.env.HOME + '/' + (req.query.dest_dir ? '') + '/' + files.file.name
41
dbg("now move '#{files.file.path}' to '#{dest}'")
42
fs.rename files.file.path, dest, (err) ->
43
if err
44
dbg("error moving -- #{err}")
45
cb(err)
46
else
47
cb()
48
], (err) ->
49
if err
50
res.status(500).send("upload failed -- #{err}")
51
else
52
res.send('received upload:\n\n')
53
)
54
55
return router
56
57