从Android客户端向HTTP服务器发送HTTP POST多部分/表单数据

时间:2018-11-14 21:37:45

标签: php http http-post multipartform-data

我正在编写一个允许用户拍照的应用程序,该照片会自动发送到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);


?>

1 个答案:

答案 0 :(得分:0)

更新和解决方案:

在一些帖子评论者的帮助下进行了故障排除之后,我首先尝试编写一个简单的HTML表单以将POST请求本地提交到PHP脚本,然后在这些请求失败后,我添加了 module.exports { ... chainWebpack: config => { config.plugin('define').tap(definitions => { definitions[0] = Object.assign(definitions[0], { $: 'jquery', jquery: 'jquery', 'window.jQuery': 'jquery', jQuery: 'jquery', _: 'lodash' }) return definitions }) } ... } 在代码开头执行功能,但仍然没有任何反应。这可以让我找出错误所在。

我遇到的问题是由错误的服务器配置引起的。这导致PHP无法被识别为已安装的语言。因此,该脚本根本没有被执行。固定配置后,脚本将完全按预期工作。

评论者的见解广受赞誉。