FileStoreHandler.coffee 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. logger = require("logger-sharelatex")
  2. fs = require("fs")
  3. request = require("request")
  4. settings = require("settings-sharelatex")
  5. oneMinInMs = 60 * 1000
  6. fiveMinsInMs = oneMinInMs * 5
  7. module.exports =
  8. uploadFileFromDisk: (project_id, file_id, fsPath, callback)->
  9. logger.log project_id:project_id, file_id:file_id, fsPath:fsPath, "uploading file from disk"
  10. readStream = fs.createReadStream(fsPath)
  11. opts =
  12. method: "post"
  13. uri: @_buildUrl(project_id, file_id)
  14. timeout:fiveMinsInMs
  15. writeStream = request(opts)
  16. readStream.pipe writeStream
  17. writeStream.on "end", callback
  18. readStream.on "error", (err)->
  19. logger.err err:err, project_id:project_id, file_id:file_id, fsPath:fsPath, "something went wrong on the read stream of uploadFileFromDisk"
  20. callback err
  21. writeStream.on "error", (err)->
  22. logger.err err:err, project_id:project_id, file_id:file_id, fsPath:fsPath, "something went wrong on the write stream of uploadFileFromDisk"
  23. callback err
  24. getFileStream: (project_id, file_id, query, callback)->
  25. logger.log project_id:project_id, file_id:file_id, query:query, "getting file stream from file store"
  26. queryString = ""
  27. if query? and query["format"]?
  28. queryString = "?format=#{query['format']}"
  29. opts =
  30. method : "get"
  31. uri: "#{@_buildUrl(project_id, file_id)}#{queryString}"
  32. timeout:fiveMinsInMs
  33. readStream = request(opts)
  34. callback(null, readStream)
  35. deleteFile: (project_id, file_id, callback)->
  36. logger.log project_id:project_id, file_id:file_id, "telling file store to delete file"
  37. opts =
  38. method : "delete"
  39. uri: @_buildUrl(project_id, file_id)
  40. timeout:fiveMinsInMs
  41. request opts, (err, response)->
  42. if err?
  43. logger.err err:err, project_id:project_id, file_id:file_id, "something went wrong deleting file from filestore"
  44. callback(err)
  45. copyFile: (oldProject_id, oldFile_id, newProject_id, newFile_id, callback)->
  46. logger.log oldProject_id:oldProject_id, oldFile_id:oldFile_id, newProject_id:newProject_id, newFile_id:newFile_id, "telling filestore to copy a file"
  47. opts =
  48. method : "put"
  49. json:
  50. source:
  51. project_id:oldProject_id
  52. file_id:oldFile_id
  53. uri: @_buildUrl(newProject_id, newFile_id)
  54. timeout:fiveMinsInMs
  55. request opts, (err)->
  56. if err?
  57. logger.err err:err, oldProject_id:oldProject_id, oldFile_id:oldFile_id, newProject_id:newProject_id, newFile_id:newFile_id, "something went wrong telling filestore api to copy file"
  58. callback(err)
  59. _buildUrl: (project_id, file_id)->
  60. return "#{settings.apis.filestore.url}/project/#{project_id}/file/#{file_id}"