#php #angularjs #slim #ng-file-upload
#php #angularjs #тонкий #ng-file-upload
Вопрос:
Я погуглил этот вопрос, но не нашел ответа. Я использую угловую директиву 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" amp;amp; $imageFileType != "png" amp;amp; $imageFileType != "jpeg" amp;amp; $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. вы можете использовать $target_file = $target_dir . (строка)базовое имя ($_FILES[$fileName][«имя»]);
Ответ №1:
Переименуйте имя файла со случайным значением
$filename1=explode(".", $file);
$extension=end($filename1);
$file=rand().time().".".$extension;
Или используйте pathinfo() для расширения
$ext = pathinfo($filename, PATHINFO_EXTENSION);