Загрузка файла завершается неудачно, если имя файла содержит пробел

Я погуглил этот вопрос, но не нашел ответа. Я использую угловую директиву ng-file-upload для загрузки изображений на свой сервер. В конце я использую php для получения изображения. Это работает нормально, если я выбираю изображение, которое не содержит пробелов. Но если я выберу изображение, которое содержит пробел, оно выдаст ошибку. Это то что я сделал

 //app.js
                       Upload.upload({  
                         url: "api/index.php/postNewFeedsWithPicture",
                                file: $scope.file,
                                method: "post"
                                 }).then(function (response) {
                                $scope.isShowing = false;
                                if (response.data.error) {
                                    toastr.options = {positionClass: 'toast-bottom-full-width'};
                                    toastr.error(response.data.message, {timeOut: 5000});
                                }
                                else {
                                    toastr.options = {positionClass: 'toast-bottom-full-width'};
                                    toastr.success(response.data.message, {timeOut: 5000});
                                    $scope.file = null;

                                }

                            }, function (reason) {
                                $scope.isShowing = false;
                                toastr.options = {positionClass: 'toast-bottom-full-width'};
                                toastr.error('Message not posted! Network error', {timeOut: 5000});
                            });                         

в моем HTML-файле я сделал это

 <div role="button" ngf-select ng-model="file" name="file" ngf-pattern="'image/*'" ngf-accept="'image/*'" ngf-max-size="20MB">Upload</div>

В моем PHP-файле я написал функцию, которая сохраняет изображение

function savePictureToDb($fileName, $dirName) {
$target_dir = "../image/" . $dirName . "/";
$target_file = $target_dir . basename($_FILES[$fileName]["name"]);
$uploadOk = 1;
$errorMsg = null;
$report = array();
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
// Check file size. //20mb
if ($_FILES[$fileName]["size"] > 20000000) {
    $uploadOk = 0;
    $errorMsg = "File size is greater than 20 mega bytes";
}
// Allow certain file formats
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
    $uploadOk = 0;
    $errorMsg = "The file selected is not an image";
}
if ($uploadOk == 0) {
    $report[ERROR] = TRUE;
    $report[MESSAGE] = $errorMsg;
    return $report;
    // if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES[$fileName]["tmp_name"], $target_file)) {
        rename($target_file, $target_dir . generateRandStr_md5(500) . "." . $imageFileType);
        $response['path'] = basename($_FILES[$fileName]["name"]);
        $report[ERROR] = FALSE;
        $report[PATH] = $response['path'];
        return $report;
    } else {
        $errorMsg = "Unexpected error";
        $report[ERROR] = TRUE;
        $report[MESSAGE] = $errorMsg;
        return $report;
    }
}

}

Он работает нормально, но если изображение содержит пробелы, это ошибка, которую я получаю при отладке

 array (
  'file' => 
   array (
   'name' => 'Age Declaration.jpg',
   'type' => '',
   'tmp_name' => '',
   'error' => 1,
    'size' => 0,
  ),
 )

1 ответ

Переименуйте имя файла со случайным значением

$filename1=explode(".", $file);
$extension=end($filename1);
$file=rand().time().".".$extension;

Или используйте pathinfo() для расширения

$ext = pathinfo($filename, PATHINFO_EXTENSION);
Другие вопросы по тегам