簡體   English   中英

從Android客戶端向HTTP服務器發送HTTP POST多部分/表單數據

[英]Sending HTTP POST multipart/form-data from Android client to HTTP server

我正在編寫一個允許用戶拍照的應用程序,該照片會自動發送到HTTP服務器,並通過HTTP POST multipart / form-data進行分類。 為了構建和發送這些請求,我正在使用Apache的HTTPClient庫。 我已經對Imgur API端點之一和正確上傳的圖像進行了測試,因此我對自己的Java客戶端代碼能夠工作充滿信心。 因此,我認為服務器上的端點很可能有錯誤。 我正在將請求發送到服務器,以編寫該文件的PHP腳本來接收該請求,將該腳本保存到服務器上的目錄中,然后將響應適當地發送回客戶端。 當我對此進行測試時,即使腳本顯然無法正常工作,服務器也會始終返回狀態碼為200的響應。 我嘗試將響應狀態代碼手動設置為500以強制輸入錯誤代碼,即使這樣也不起作用,這使我認為當請求到達端點時,整個腳本甚至無法運行(如果它甚至到達了端點) )。 我希望這要么是服務器配置錯誤,要么是腳本本身錯誤。 但是,為了方便起見,我粘貼了Java代碼。 您可能在那里也發現了一些錯誤。 我對網絡或PHP都不滿意,因此我可以肯定會使用一些更有經驗的眼睛。

  • 注意:我知道我的PHP代碼看起來很糟糕。 您可能會發現很多不良做法; 抱歉。

我的服務器代碼:

<?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);


?>

更新和解決方案:

在一些帖子評論者的幫助下進行了一些故障排除之后,我首先嘗試編寫一個簡單的HTML表單以將POST請求本地提交到PHP腳本,然后在這些請求失敗后,然后在以下代碼的開頭添加die()函數代碼,但仍然沒有任何反應。 這使我能夠找出錯誤。

我遇到的問題是由錯誤的服務器配置引起的。 這導致PHP無法被識別為已安裝的語言。 因此,該腳本根本沒有被執行。 固定配置后,腳本將完全按預期工作。

評論者的洞察力備受贊譽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM