Piszę aplikację, która umożliwi użytkownikowi zrobienie zdjęcia, które jest automatycznie wysyłane na serwer HTTP w celu sklasyfikowania przez HTTP POST multipart/form-data. Aby zbudować i wysłać te żądania, używam biblioteki HTTPClient Apache. Jestem pewien, że mój kod po stronie klienta Java działa, ponieważ testowałem z jednym z punktów końcowych Imgur API i poprawnie przesłanymi obrazami; dlatego uważam, że najprawdopodobniej wystąpił błąd w punkcie końcowym na moim serwerze. Wysyłam żądanie do serwera, aby zostało odebrane przez skrypt PHP, który napisałem, aby odebrać plik, zapisać go w katalogu na serwerze i odpowiednio wysłać odpowiedź z powrotem do klienta. Kiedy to testuję, serwer zawsze odsyła odpowiedź z kodem statusu 200, mimo że skrypt oczywiście nie działa. Próbowałem ręcznie ustawić kod stanu odpowiedzi na 500, aby wymusić kod błędu, a nawet to nie działa, co sprawia, że ​​myślę, że cały skrypt nie działa nawet, gdy żądanie trafi do punktu końcowego (jeśli nawet trafi w punkt końcowy ). Spodziewam się, że będzie to albo błąd w konfiguracji serwera, albo błąd w samym skrypcie. Jednak na wszelki wypadek wkleiłem kod Java. Możesz tam również znaleźć błędy. Nie jestem dobry w sieciowaniu ani w PHP, więc zdecydowanie przydałoby mi się trochę bardziej doświadczonych oczu.

  • Uwaga: wiem, że mój kod PHP wygląda okropnie. Prawdopodobnie znajdziesz wiele złych praktyk; Przepraszam.

Mój kod serwera:

<?php

$path = '/home/user01/Documents/uploaded_images/';
$ext = '.jpg';

function getFileName() {
  return 'image_'.date('Y-m-d_His');
}

//Receive the data from android client

$file = $_FILES['uploadedFile'];


//process the data

$filename = $path . getFileName() . '_' . $_SERVER['REMOTE_ADDR'] . $ext;

if (!is_uploaded_file($file['tmp_name']) ||
    !copy($file['tmp_name'], $filename))
{
  $message = 'Could not save file as' . $filename;
  $error = True;
}
else {
  $message = "Image uploaded successfully!";
  $error = False;
}

//return response to the server

if ($error) {
  http_response_code(500);
}

echo json_encode(
  array(
    'status' => 'Repsonse Code :' . http_response_code(),
    'message' => $message
  ), JSON_FORCE_OBJECT);


?>
0
Andrew Fink 15 listopad 2018, 00:37

1 odpowiedź

Najlepsza odpowiedź

Aktualizacja i rozwiązanie:

Po pewnym rozwiązywaniu problemów z pomocą kilku komentatorów postów, najpierw spróbowałem napisać prosty formularz HTML, aby przesłać żądania POST lokalnie do skryptu PHP, a gdy te żądania się nie powiodły, dodałem funkcję die() w początku kodu, a mimo to nic się nie stało. To pozwoliło mi dowiedzieć się, że błąd.

Problemy, które miałem, były spowodowane złą konfiguracją serwera. To powodowało, że PHP nie było rozpoznawane jako zainstalowany język; dlatego skrypt w ogóle nie był wykonywany. Po naprawieniu konfiguracji skrypt działał dokładnie zgodnie z oczekiwaniami.

Wielkie uznanie dla komentatorów za ich wgląd.

0
Andrew Fink 17 listopad 2018, 23:06