FileWriter.coffee 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. fs = require 'fs'
  2. logger = require 'logger-sharelatex'
  3. uuid = require 'uuid'
  4. _ = require 'underscore'
  5. Settings = require 'settings-sharelatex'
  6. request = require 'request'
  7. module.exports = FileWriter =
  8. writeStreamToDisk: (identifier, stream, callback = (error, fsPath) ->) ->
  9. callback = _.once(callback)
  10. fsPath = "#{Settings.path.dumpFolder}/#{identifier}_#{uuid.v4()}"
  11. stream.pause()
  12. fs.mkdir Settings.path.dumpFolder, (error) ->
  13. stream.resume()
  14. if error? and error.code != 'EEXIST'
  15. # Ignore error about already existing
  16. return callback(error)
  17. writeStream = fs.createWriteStream(fsPath)
  18. stream.pipe(writeStream)
  19. stream.on 'error', (err)->
  20. logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with incoming stream"
  21. callback(err)
  22. writeStream.on 'error', (err)->
  23. logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with writing to disk"
  24. callback(err)
  25. writeStream.on "finish", ->
  26. logger.log {identifier, fsPath}, "[writeStreamToDisk] write stream finished"
  27. callback null, fsPath
  28. writeUrlToDisk: (identifier, url, callback = (error, fsPath) ->) ->
  29. callback = _.once(callback)
  30. stream = request.get(url)
  31. stream.on 'response', (response) ->
  32. if 200 <= response.statusCode < 300
  33. FileWriter.writeStreamToDisk identifier, stream, callback
  34. else
  35. err = new Error("bad response from url: #{response.statusCode}")
  36. logger.err {err, identifier, url}, err.message
  37. callback(err)