mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-15 06:33:55 +01:00
Merge pull request #1675 from sharelatex/spd-zip-file-limit-ui
Display more descriptive errors when uploading a project fails GitOrigin-RevId: e206ca0d595f927ab141fb901644906f000160f8
This commit is contained in:
committed by
sharelatex
parent
88446ffa9b
commit
385da07930
@@ -239,6 +239,7 @@ module.exports = ProjectController =
|
||||
hasSubscription: results.hasSubscription
|
||||
isShowingV1Projects: results.v1Projects?
|
||||
warnings: warnings
|
||||
zipFileSizeLimit: Settings.maxUploadSize
|
||||
}
|
||||
|
||||
if Settings?.algolia?.app_id? and Settings?.algolia?.read_only_api_key?
|
||||
|
||||
@@ -5,6 +5,7 @@ Path = require "path"
|
||||
fse = require "fs-extra"
|
||||
yauzl = require "yauzl"
|
||||
Settings = require "settings-sharelatex"
|
||||
Errors = require "../Errors/Errors"
|
||||
_ = require("underscore")
|
||||
|
||||
ONE_MEG = 1024 * 1024
|
||||
@@ -16,7 +17,7 @@ module.exports = ArchiveManager =
|
||||
|
||||
totalSizeInBytes = null
|
||||
yauzl.open source, {lazyEntries: true}, (err, zipfile) ->
|
||||
return callback(err) if err?
|
||||
return callback(new Errors.InvalidError("invalid_zip_file")) if err?
|
||||
|
||||
if Settings.maxEntitiesPerProject? and zipfile.entryCount > Settings.maxEntitiesPerProject
|
||||
return callback(null, true) # too many files in zip file
|
||||
@@ -113,7 +114,7 @@ module.exports = ArchiveManager =
|
||||
return callback(err)
|
||||
|
||||
if isTooLarge
|
||||
return callback(new Error("zip_too_large"))
|
||||
return callback(new Errors.InvalidError("zip_contents_too_large"))
|
||||
|
||||
timer = new metrics.Timer("unzipDirectory")
|
||||
logger.log source: source, destination: destination, "unzipping file"
|
||||
|
||||
@@ -5,6 +5,22 @@ Path = require "path"
|
||||
FileSystemImportManager = require "./FileSystemImportManager"
|
||||
ProjectUploadManager = require "./ProjectUploadManager"
|
||||
AuthenticationController = require('../Authentication/AuthenticationController')
|
||||
Settings = require "settings-sharelatex"
|
||||
Errors = require "../Errors/Errors"
|
||||
multer = require('multer')
|
||||
|
||||
upload = null
|
||||
|
||||
try
|
||||
upload = multer(
|
||||
dest: Settings.path.uploadFolder
|
||||
limits: fileSize: Settings.maxUploadSize
|
||||
)
|
||||
catch err
|
||||
if err.message == "EEXIST"
|
||||
logger.log uploadFolder:Settings.path.uploadFolder, "dir already exists, continuing"
|
||||
else
|
||||
logger.err err:err, "caught error from multer in uploads router"
|
||||
|
||||
module.exports = ProjectUploadController =
|
||||
uploadProject: (req, res, next) ->
|
||||
@@ -19,7 +35,10 @@ module.exports = ProjectUploadController =
|
||||
logger.error
|
||||
err: error, file_path: path, file_name: name,
|
||||
"error uploading project"
|
||||
res.send success: false
|
||||
if error.name? && error.name == 'InvalidError'
|
||||
res.status(422).json { success: false, error: req.i18n.translate(error.message) }
|
||||
else
|
||||
res.status(500).json { success: false, error: req.i18n.translate("upload_failed") }
|
||||
else
|
||||
logger.log
|
||||
project: project._id, file_path: path, file_name: name,
|
||||
@@ -52,3 +71,11 @@ module.exports = ProjectUploadController =
|
||||
project_id: project_id, file_path: path, file_name: name, folder_id: folder_id
|
||||
"uploaded file"
|
||||
res.send success: true, entity_id: entity?._id, entity_type: entity?.type
|
||||
|
||||
multerMiddleware: (req, res, next) ->
|
||||
return res.status(500).json {success: false, error: req.i18n.translate("upload_failed")} unless upload?
|
||||
upload.single('qqfile') req, res, (err) ->
|
||||
if err instanceof multer.MulterError && err.code == 'LIMIT_FILE_SIZE'
|
||||
return res.status(422).json {success: false, error: req.i18n.translate("file_too_large")}
|
||||
|
||||
next(err)
|
||||
|
||||
@@ -3,19 +3,6 @@ AuthenticationController = require('../Authentication/AuthenticationController')
|
||||
ProjectUploadController = require "./ProjectUploadController"
|
||||
RateLimiterMiddleware = require('../Security/RateLimiterMiddleware')
|
||||
Settings = require('settings-sharelatex')
|
||||
multer = require('multer')
|
||||
|
||||
try
|
||||
upload = multer(
|
||||
dest: Settings.path.uploadFolder
|
||||
limits: fileSize: Settings.maxUploadSize
|
||||
)
|
||||
catch err
|
||||
if err.message == "EEXIST"
|
||||
logger.log uploadFolder:Settings.path.uploadFolder, "dir already exists, continuing"
|
||||
else
|
||||
logger.err err:err, "caught error from multer in uploads router"
|
||||
|
||||
|
||||
module.exports =
|
||||
apply: (webRouter, apiRouter) ->
|
||||
@@ -26,7 +13,7 @@ module.exports =
|
||||
maxRequests: 20
|
||||
timeInterval: 60
|
||||
}),
|
||||
upload.single('qqfile'),
|
||||
ProjectUploadController.multerMiddleware,
|
||||
ProjectUploadController.uploadProject
|
||||
|
||||
webRouter.post '/Project/:Project_id/upload',
|
||||
@@ -38,5 +25,5 @@ module.exports =
|
||||
}),
|
||||
AuthenticationController.requireLogin(),
|
||||
AuthorizationMiddleware.ensureUserCanWriteProjectContent,
|
||||
upload.single('qqfile'),
|
||||
ProjectUploadController.multerMiddleware,
|
||||
ProjectUploadController.uploadFile
|
||||
|
||||
@@ -256,6 +256,7 @@ script(type="text/ng-template", id="uploadProjectModalTemplate")
|
||||
endpoint="/project/new/upload"
|
||||
template-id="qq-project-uploader-template"
|
||||
multiple="false"
|
||||
size-limit=zipFileSizeLimit
|
||||
allowed-extensions="['zip']"
|
||||
on-complete-callback="onComplete"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user