当前位置: 首页 > 面试题库 >

通过cURL从PHP中的POST表单发送文件

方奕
2023-03-14
问题内容

我正在编写API,并且想处理从表单上传的文件POST。表单的标记没有什么太复杂的:

<form action="" method="post" enctype="multipart/form-data">
  <fieldset>
    <input type="file" name="image" id="image" />
    <input type="submit" name="upload" value="Upload" />
  </fieldset>
</form>

但是,我很难理解如何处理此服务器端并与cURL请求一起发送。

我熟悉使用POST带有数据数组的cURL
发送请求,并且在上载文件时阅读的资源告诉我在文件名前加上一个@符号。但是这些相同的资源具有硬编码的文件名,例如

$post = array(
    'image' => '@/path/to/myfile.jpg',
    ...
);

那么这是哪个文件路径?我在哪里可以找到它?会是什么样子$_FILES['image']['tmp_name'],在这种情况下,我的$post数组应该像这样:

$post = array(
    'image' => '@' . $_FILES['image']['tmp_name'],
    ...
);

还是我走错路了?任何建议将不胜感激。

编辑:
如果有人可以给我一个代码片段,说明我将使用以下代码片段,那么我将不胜感激。我主要关注的是我将要作为cURL参数发送的内容,以及如何在接收脚本中使用这些参数的示例(curl_receiver.php为方便起见,我们称之为参数)。

我有这个网络表格:

<form action="script.php" method="post" enctype="multipart/form-data">
  <fieldset>
    <input type="file" name="image />
    <input type="submit" name="upload" value="Upload" />
  </fieldset>
</form>

这将是script.php

if (isset($_POST['upload'])) {
    // cURL call would go here
    // my tmp. file would be $_FILES['image']['tmp_name'], and
    // the filename would be $_FILES['image']['name']
}

问题答案:

这是一些将文件发送到ftp的生产代码(对于您来说可能是一个很好的解决方案):

// This is the entire file that was uploaded to a temp location.
$localFile = $_FILES[$fileKey]['tmp_name'];

$fp = fopen($localFile, 'r');

// Connecting to website.
$ch = curl_init();

curl_setopt($ch, CURLOPT_USERPWD, "email@email.org:password");
curl_setopt($ch, CURLOPT_URL, 'ftp://@ftp.website.net/audio/' . $strFileName);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'CURL_callback');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localFile));
curl_exec ($ch);

if (curl_errno($ch)) {

    $msg = curl_error($ch);
}
else {

    $msg = 'File uploaded successfully.';
}

curl_close ($ch);

$return = array('msg' => $msg);

echo json_encode($return);


 类似资料:
  • 我如何发送此信息: 到API: 使用cURL,我目前一直在使用: 其中我得到了结果(NGrok): GET/testDir/curlPost。php HTTP/1.1 接受:text/html、Application/xhtml xml、image/jxr、/ 接受语言:en-GB 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537

  • 问题内容: 我正在执行一个Android程序,该程序应该将数据从平板电脑发送到PHP Web服务。发送JSON的代码: PHP Web服务: 我尝试了获取JSON的不同方法,但没有一个对我有用。也许StackOverflow的优秀人才可以帮助我解决这个问题,因为他们总是遇到我遇到的其他所有问题。 问题答案: 在注释部分,您似乎只希望将JSON发送到您的PHP脚本。通常,您将POST发布到PHP,然

  • 问题内容: 这已经困扰了我好几天了;我正在尝试通过Curl发送SOAP帖子,但是我一直收到“无法连接到主机”错误,但是,我真的看不到如何。 我有一个ASP版本,可以在相同的URL和数据下正常工作。我认为这只是PHP / Curl的事情。 我目前有以下代码(数据是有效的SOAP信封字符串): 那么有什么想法为什么总是会出错? ASP版本工作正常!代码是: 问题答案: 非常感谢,您的代码对我有用。 这

  • 我是新来的,努力想找到我的答案,但我仍然有同样的问题。我已经检查了所有类似的问题和答案,但没有一个能帮助我,所以如果你知道同样的问题 我有一个html表单,它假设接受一个zip文件和一个字符串,然后希望通过Post方法将它们传递给Web服务。 我有其余的api服务器,这是我通过Spring boot编写的,现在尝试制作一个客户端测试项目来测试它。Postman的测试是成功的,我发送请求并接收响应没

  • 问题内容: 我一直在为它构建一个Rest API,并且一直在使用命令行中的curl对它进行测试,这对于CRUD非常容易 我可以从命令行成功进行这些调用 上面的调用很容易从命令行进行,并且可以在我的api上正常使用,但是现在我想使用PHP创建curl。如您所见,我将数据作为json字符串传递。我已经阅读了很多,我想我可能可以进行POST并包含POST字段,但是我无法找出如何通过GET传递http正文

  • 问题内容: 我有一个在线网关,要求将HTML表单与隐藏字段一起提交。我需要通过没有任何HTML形式的PHP脚本来执行此操作(我具有数据库中隐藏字段的数据) 要通过GET发送数据,请执行以下操作: 并通过POST发送数据? 问题答案: 您无法使用PHP执行此操作。 正如其他人所说,您可以使用cURL-但是PHP代码成为客户端而不是浏览器。 如果必须使用POST,那么唯一的方法就是使用PHP生成填充的