ProjectDownloadsController.coffee 1.0 KB

12345678910111213141516171819202122232425
  1. logger = require "logger-sharelatex"
  2. Metrics = require "../../infrastructure/Metrics"
  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)