FileHandler.coffee 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. settings = require("settings-sharelatex")
  2. s3Wrapper = require("./s3Wrapper")
  3. LocalFileWriter = require("./LocalFileWriter")
  4. logger = require("logger-sharelatex")
  5. FileConverter = require("./FileConverter")
  6. KeyBuilder = require("./KeyBuilder")
  7. async = require("async")
  8. ImageOptimiser = require("./ImageOptimiser")
  9. module.exports =
  10. insertFile: (bucket, key, stream, callback)->
  11. convetedKey = KeyBuilder.getConvertedFolderKey(key)
  12. s3Wrapper.deleteDirectory bucket, convetedKey, ->
  13. s3Wrapper.sendStreamToS3 bucket, key, stream, ->
  14. callback()
  15. deleteFile: (bucket, key, callback)->
  16. convetedKey = KeyBuilder.getConvertedFolderKey(bucket, key)
  17. async.parallel [
  18. (done)-> s3Wrapper.deleteFile bucket, key, done
  19. (done)-> s3Wrapper.deleteFile bucket, convetedKey, done
  20. ], callback
  21. getFile: (bucket, key, opts = {}, callback)->
  22. logger.log bucket:bucket, key:key, opts:opts, "getting file"
  23. if !opts.format? and !opts.style?
  24. @_getStandardFile bucket, key, opts, callback
  25. else
  26. @_getConvertedFile bucket, key, opts, callback
  27. _getStandardFile: (bucket, key, opts, callback)->
  28. s3Wrapper.getFileStream bucket, key, (err, fileStream)->
  29. if err?
  30. logger.err bucket:bucket, key:key, opts:opts, "error getting fileStream"
  31. callback err, fileStream
  32. _getConvertedFile: (bucket, key, opts, callback)->
  33. convetedKey = KeyBuilder.addCachingToKey(key, opts)
  34. s3Wrapper.checkIfFileExists bucket, convetedKey, (err, exists)=>
  35. if exists
  36. s3Wrapper.getFileStream bucket, convetedKey, callback
  37. else
  38. @_getConvertedFileAndCache bucket, key, convetedKey, opts, callback
  39. _getConvertedFileAndCache: (bucket, key, convetedKey, opts, callback)->
  40. @_convertFile bucket, key, opts, (err, fsPath)->
  41. if err?
  42. logger.err err:err, fsPath:fsPath, bucket:bucket, key:key, opts:opts, "something went wrong with converting file"
  43. return callback(err)
  44. ImageOptimiser.compressPng fsPath, (err)->
  45. if err?
  46. logger.err err:err, fsPath:fsPath, bucket:bucket, key:key, opts:opts, "something went wrong optimising png file"
  47. return callback(err)
  48. s3Wrapper.sendFileToS3 bucket, convetedKey, fsPath, (err)->
  49. if err?
  50. logger.err err:err, bucket:bucket, key:key, convetedKey:convetedKey, opts:opts, "something went wrong seing file to s3"
  51. return callback(err)
  52. s3Wrapper.getFileStream bucket, convetedKey, callback
  53. _convertFile: (bucket, origonalKey, opts, callback)->
  54. @_writeS3FileToDisk bucket, origonalKey, (err, origonalFsPath)->
  55. if opts.format?
  56. FileConverter.convert origonalFsPath, opts.format, callback
  57. else if opts.style == "thumbnail"
  58. FileConverter.thumbnail origonalFsPath, callback
  59. else if opts.style == "preview"
  60. FileConverter.preview origonalFsPath, callback
  61. else
  62. throw new Error("should have specified opts to convert file with #{JSON.stringify(opts)}")
  63. _writeS3FileToDisk: (bucket, key, callback)->
  64. s3Wrapper.getFileStream bucket, key, (err, fileStream)->
  65. LocalFileWriter.writeStream fileStream, key, callback