Improve error messages when hitting PHP file upload issues
Summary: See T429. When you hit certain errors, you get less-than-helpful messages like "upload error 3". Instead, produce human-readable errors. Test Plan: Simulated errors, verified user receives decent error messages. Reviewed By: aran Reviewers: jungejason, tuomaspelkonen, aran, startupguy CC: aran Differential Revision: 816
This commit is contained in:
@@ -420,6 +420,7 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorFileTransformController' => 'applications/files/controller/transform',
|
'PhabricatorFileTransformController' => 'applications/files/controller/transform',
|
||||||
'PhabricatorFileURI' => 'applications/files/uri',
|
'PhabricatorFileURI' => 'applications/files/uri',
|
||||||
'PhabricatorFileUploadController' => 'applications/files/controller/upload',
|
'PhabricatorFileUploadController' => 'applications/files/controller/upload',
|
||||||
|
'PhabricatorFileUploadException' => 'applications/files/exception/upload',
|
||||||
'PhabricatorFileViewController' => 'applications/files/controller/view',
|
'PhabricatorFileViewController' => 'applications/files/controller/view',
|
||||||
'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/garbagecollector',
|
'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/garbagecollector',
|
||||||
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/goodfornothing',
|
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/goodfornothing',
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
final class PhabricatorFileUploadException extends Exception {
|
||||||
|
|
||||||
|
public function __construct($code) {
|
||||||
|
$map = array(
|
||||||
|
UPLOAD_ERR_INI_SIZE =>
|
||||||
|
"Uploaded file is too large: file is larger than the ".
|
||||||
|
"'upload_max_size' setting in php.ini.",
|
||||||
|
UPLOAD_ERR_FORM_SIZE =>
|
||||||
|
"File is too large.",
|
||||||
|
UPLOAD_ERR_PARTIAL =>
|
||||||
|
"File was only partially transferred, upload did not complete.",
|
||||||
|
UPLOAD_ERR_NO_FILE =>
|
||||||
|
"No file was uploaded.",
|
||||||
|
UPLOAD_ERR_NO_TMP_DIR =>
|
||||||
|
"Unable to write file: temporary directory does not exist.",
|
||||||
|
UPLOAD_ERR_CANT_WRITE =>
|
||||||
|
"Unable to write file: failed to write to temporary directory.",
|
||||||
|
UPLOAD_ERR_EXTENSION =>
|
||||||
|
"Unable to upload: a PHP extension stopped the upload.",
|
||||||
|
);
|
||||||
|
|
||||||
|
$message = idx($map, $code, "Upload failed: unknown error.");
|
||||||
|
parent::__construct($message, $code);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
src/applications/files/exception/upload/__init__.php
Normal file
12
src/applications/files/exception/upload/__init__.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorFileUploadException.php');
|
||||||
@@ -48,7 +48,7 @@ class PhabricatorFile extends PhabricatorFileDAO {
|
|||||||
|
|
||||||
$err = idx($spec, 'error');
|
$err = idx($spec, 'error');
|
||||||
if ($err) {
|
if ($err) {
|
||||||
throw new Exception("File upload failed with error '{$err}'.");
|
throw new PhabricatorFileUploadException($err);
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmp_name = idx($spec, 'tmp_name');
|
$tmp_name = idx($spec, 'tmp_name');
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/files/exception/upload');
|
||||||
phutil_require_module('phabricator', 'applications/files/storage/base');
|
phutil_require_module('phabricator', 'applications/files/storage/base');
|
||||||
phutil_require_module('phabricator', 'applications/files/uri');
|
phutil_require_module('phabricator', 'applications/files/uri');
|
||||||
phutil_require_module('phabricator', 'applications/phid/constants');
|
phutil_require_module('phabricator', 'applications/phid/constants');
|
||||||
|
|||||||
Reference in New Issue
Block a user