正在从 Android 客户端向 HTTP 服务器发送 HTTP POST multipart/form-data
Sending HTTP POST multipart/form-data from Android client to HTTP server
我正在编写一个允许用户拍照的应用程序,照片会自动发送到 HTTP 服务器以通过 HTTP 进行分类 POST multipart/form-data。为了构建和发送这些请求,我使用了 Apache 的 HTTPClient 库。我有点相信我的 Java 客户端代码可以正常工作,因为我已经使用 Imgur API 端点之一进行了测试并且图像已正确上传;因此,我认为我的服务器上的端点很可能存在错误。我将请求发送到服务器,由我编写的用于接收文件的 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);
?>
更新和解决方案:
在一些 post 评论者的帮助下进行了一些故障排除后,我首先尝试编写一个简单的 HTML 表单以在本地提交 POST 请求到 PHP 脚本,在这些请求失败后,我在代码的开头添加了 die()
函数,但仍然没有任何反应。这让我弄清楚了错误。
我遇到的问题是由错误的服务器配置引起的。它导致 PHP 不被识别为已安装的语言;因此,脚本根本没有被执行。修复配置后,脚本完全按预期工作。
非常感谢评论者的见解。
我正在编写一个允许用户拍照的应用程序,照片会自动发送到 HTTP 服务器以通过 HTTP 进行分类 POST multipart/form-data。为了构建和发送这些请求,我使用了 Apache 的 HTTPClient 库。我有点相信我的 Java 客户端代码可以正常工作,因为我已经使用 Imgur API 端点之一进行了测试并且图像已正确上传;因此,我认为我的服务器上的端点很可能存在错误。我将请求发送到服务器,由我编写的用于接收文件的 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);
?>
更新和解决方案:
在一些 post 评论者的帮助下进行了一些故障排除后,我首先尝试编写一个简单的 HTML 表单以在本地提交 POST 请求到 PHP 脚本,在这些请求失败后,我在代码的开头添加了 die()
函数,但仍然没有任何反应。这让我弄清楚了错误。
我遇到的问题是由错误的服务器配置引起的。它导致 PHP 不被识别为已安装的语言;因此,脚本根本没有被执行。修复配置后,脚本完全按预期工作。
非常感谢评论者的见解。