【问题标题】:Sending HTTP POST multipart/form-data from Android client to HTTP server将 HTTP POST multipart/form-data 从 Android 客户端发送到 HTTP 服务器
【发布时间】: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


【解决方案1】:

更新和解决:

在一些帖子评论者的帮助下进行了一些故障排除后,我首先尝试编写一个简单的 HTML 表单以在本地将 POST 请求提交到 PHP 脚本,在这些请求失败后,我添加了 die() 函数代码的开头,仍然没有发生任何事情。这让我发现了错误。

我遇到的问题是由错误的服务器配置引起的。它导致 PHP 无法被识别为已安装的语言;因此,脚本根本没有被执行。一旦配置被修复,脚本就完全按照预期工作了。

非常感谢评论者的见解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多