ProjectDownloadsController.coffee 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. logger = require "logger-sharelatex"
  2. Metrics = require "metrics-sharelatex"
  3. Project = require("../../models/Project").Project
  4. ProjectZipStreamManager = require "./ProjectZipStreamManager"
  5. DocumentUpdaterHandler = require "../DocumentUpdater/DocumentUpdaterHandler"
  6. module.exports = ProjectDownloadsController =
  7. downloadProject: (req, res, next) ->
  8. project_id = req.params.Project_id
  9. Metrics.inc "zip-downloads"
  10. logger.log project_id: project_id, "downloading project"
  11. DocumentUpdaterHandler.flushProjectToMongo project_id, (error)->
  12. return next(error) if error?
  13. Project.findById project_id, "name", (error, project) ->
  14. return next(error) if error?
  15. ProjectZipStreamManager.createZipStreamForProject project_id, (error, stream) ->
  16. return next(error) if error?
  17. res.header(
  18. "Content-Disposition",
  19. "attachment; filename=#{encodeURIComponent(project.name)}.zip"
  20. )
  21. res.contentType('application/zip')
  22. stream.pipe(res)
  23. downloadMultipleProjects: (req, res, next) ->
  24. project_ids = req.query.project_ids.split(",")
  25. Metrics.inc "zip-downloads-multiple"
  26. logger.log project_ids: project_ids, "downloading multiple projects"
  27. DocumentUpdaterHandler.flushMultipleProjectsToMongo project_ids, (error) ->
  28. return next(error) if error?
  29. ProjectZipStreamManager.createZipStreamForMultipleProjects project_ids, (error, stream) ->
  30. return next(error) if error?
  31. res.header(
  32. "Content-Disposition",
  33. "attachment; filename=ShareLaTeX Projects (#{project_ids.length} items).zip"
  34. )
  35. res.contentType('application/zip')
  36. stream.pipe(res)