overleaf/services/filestore/app/coffee/LocalFileWriter.coffee

58 lines
1.8 KiB
CoffeeScript
Raw Normal View History

2014-02-14 11:39:05 -05:00
fs = require("fs")
uuid = require('node-uuid')
path = require("path")
_ = require("underscore")
logger = require("logger-sharelatex")
metrics = require("metrics-sharelatex")
2014-05-17 16:01:48 -04:00
Settings = require("settings-sharelatex")
Errors = require "./Errors"
2014-02-14 11:39:05 -05:00
module.exports =
writeStream: (stream, key, callback)->
timer = new metrics.Timer("writingFile")
callback = _.once callback
fsPath = @_getPath(key)
logger.log fsPath:fsPath, "writing file locally"
writeStream = fs.createWriteStream(fsPath)
writeStream.on "finish", ->
timer.done()
logger.log fsPath:fsPath, "finished writing file locally"
callback(null, fsPath)
writeStream.on "error", (err)->
logger.err err:err, fsPath:fsPath, "problem writing file locally, with write stream"
callback err
stream.on "error", (err)->
logger.log err:err, fsPath:fsPath, "problem writing file locally, with read stream"
callback err
2015-05-08 10:19:45 -04:00
stream.pipe writeStream
2014-02-14 11:39:05 -05:00
getStream: (fsPath, _callback = (err, res)->) ->
callback = _.once _callback
timer = new metrics.Timer("readingFile")
logger.log fsPath:fsPath, "reading file locally"
readStream = fs.createReadStream(fsPath)
readStream.on "end", ->
timer.done()
logger.log fsPath:fsPath, "finished reading file locally"
readStream.on "error", (err)->
logger.err err:err, fsPath:fsPath, "problem reading file locally, with read stream"
if err.code == 'ENOENT'
callback new Errors.NotFoundError(err.message), null
else
callback err
callback null, readStream
2014-02-14 11:39:05 -05:00
deleteFile: (fsPath, callback)->
2016-12-19 09:48:09 -05:00
if !fsPath? or fsPath == ""
return callback()
logger.log fsPath:fsPath, "removing local temp file"
2014-02-14 11:39:05 -05:00
fs.unlink fsPath, callback
_getPath : (key)->
if !key?
key = uuid.v1()
key = key.replace(/\//g,"-")
console.log Settings.path.uploadFolder, key
2014-05-17 16:01:48 -04:00
path.join(Settings.path.uploadFolder, key)