Загрузить изображение с помощью Angular 8 и PHP на сервер не работает должным образом - PullRequest
0 голосов
/ 23 сентября 2019

Я уже несколько часов пытаюсь загрузить изображение на свой сервер с помощью PHP.Я только ранее работал в Angular 2, и теперь, когда я перешел на 8, я не могу заставить свой старый код работать, и я подозреваю, что это происходит из-за обновления методов Http до HttpClient.

Вот app.component.ts, который вызывает сервис с входным файлом:

let fileslen = $("#images")[0].files.length;
for(let i = 0; i < fileslen; i++){
  this.files.push($("#images")[0].files[i]);
  this.serviceImage.uploadImage(upload_url, this.files[i])
        .subscribe(
            response=> {
              this.imagesUrl.push(response["image"]);
            },
            error=>{
              alert('error:' + JSON.stringify(error));
            }
        );
}

Это моя сервисная функция для загрузки изображения:

uploadImage(url: string, file: File) {
        return Observable.create(observer => {
            let formData: FormData = new FormData();
            let xhr: XMLHttpRequest = new XMLHttpRequest();
            if (file != undefined) {
              formData.append("image", file, file.name);
              }
            xhr.onreadystatechange = () => {
              if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                  observer.next(JSON.parse(xhr.response));
                  observer.complete();
                } else {
                  observer.error(xhr.response);
                }
              }
            };
            xhr.open('POST', url, true);
            xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
            xhr.send(formData);
          });
      }

И, наконец, этоphp файл:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

    $uploads_dir = 'uploads';
    $object = new stdClass();
    $errorMsg = "Error in image";
    $noFile = "No file";
    if(isset($_FILES['imagen'])){
        $tmp_name = $_FILES['image']['tmp_name'];
        $ext = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);
        $randNum = rand(0, 1000);
        $fileName = time() . sha1($_FILES['image']['name']. $randNum) . "." .$ext;
        if(move_uploaded_file($tmp_name, "$uploads_dir/$fileName")){
            $object->image = "$fileName";
            echo json_encode($object);
        }else{
            echo json_encode($errorMsg);
        }
    }else{
        echo json_encode($noFile);
    }
?>

Вывод консоли: «Ошибка в изображении»

Журнал ошибок сервера показывает это:

[Mon Sep 23 13:38:53.573923 2019] [proxy_fcgi:error] 
[pid 17680:tid 140606869325568] 
[client 213.127.0.0:37223] 
AH01071: Got error 'PHP message: PHP Warning:
move_uploaded_file(uploads/156923873339c6f3f02e62236530e6b49efbafabacd958828a.pdf): 
failed to open stream: 
No such file or directory in /var/www/clients/client490/web1568/web/app/php/upload_image.php 
on line 15\nPHP message: PHP Warning:  move_uploaded_file(): 
Unable to move '/var/www/clients/client490/web1568/tmp/phpIdHxdy' 
to 'uploads/156923873339c6f3f02e62236530e6b49efbafabacd958828a.pdf' 
in /var/www/clients/client490/web1568/web/app/php/upload_image.php 
on line 15\n', 
referer: {url}
...