【发布时间】:2018-11-14 21:37:44
【问题描述】:
我正在编写一个允许用户拍照的应用程序,该应用程序会自动发送到 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);
?>
【问题讨论】:
-
你需要弄清楚这是客户端问题还是服务器问题,然后删除不相关的代码和标签。
-
@miken32 我删除了 Android 标签。我预计这是一个服务器问题,但我不能 100% 确定。因此,我对删除可能存在问题的 Java 代码犹豫不决。
-
所以制作一个快速的 HTML 表单,在网络浏览器中打开它,然后尝试上传文件。会发生什么?
-
如果您怀疑 PHP 代码甚至没有被执行,那么我们可以通过查看它来做些什么。在 PHP 代码的顶部添加
die('foo');并检查应用程序是否收到该响应。如果是,则应用程序会到达端点,这是代码问题。如果不是,则存在请求或服务器问题。 -
@miken32 我添加了一个用于上传图像的 HTML 表单,据我所知,当我通过表单提交请求时,没有任何反应。页面只是重定向到upload.php页面并正常加载。
标签: php http http-post multipartform-data