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

在curl中将原始图像数据作为多部分/表单数据发布

白和泽
2023-03-14
问题内容

我正在尝试使用multipart / form-data标头在PHP中使用cURL发布图像,因为我发送给的API期望图像以多部分形式发送。

使用其他请求与API通讯时,我没有任何问题;仅发布图像是一个问题。

我在客户端使用此表单:

<form action="http://myServerURL" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="Submit">
</form>

这是我要发布到的服务器(在这里我试图将此数据转发到API):

$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $imgRawData); // <-- raw data here hm?
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookieJar);
curl_setopt( $ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); <-- using this as I wanted to check if HTTPHEADER is set
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data')); <-- setting content-type header?
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

// i get response from the server
$response = curl_exec( $ch );

// with this I can check what kind of content type the last request had?
$requestContentType = curl_getinfo($ch,CURLINFO_CONTENT_TYPE);
echo "<br>request Content Type was:".$requestContentType."<br>";

curl_close($ch);

echo "<br><b>SERVER POST IMAGE RESPONSE:</b><br>";
echo $response;

使用下面的代码,我可以看到我的请求标头:

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

var_dump(curl_getinfo($ch));

现在可以正确显示请求标题中的内容类型。但是似乎图像未按照API的预期正确发送。不幸的是,我无权访问API …

任何帮助表示赞赏,谢谢


问题答案:

如果任何人有同样的问题:检查这所建议@PravinS。我使用的代码与此处显示的完全相同,并且非常适合我。

这是服务器代码的相关部分,它有助于:

if (isset($_POST['btnUpload']))
{
$url = "URL_PATH of upload.php"; // e.g. http://localhost/myuploader/upload.php // request URL
$filename = $_FILES['file']['name'];
$filedata = $_FILES['file']['tmp_name'];
$filesize = $_FILES['file']['size'];
if ($filedata != '')
{
    $headers = array("Content-Type:multipart/form-data"); // cURL headers for file uploading
    $postfields = array("filedata" => "@$filedata", "filename" => $filename);
    $ch = curl_init();
    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_HEADER => true,
        CURLOPT_POST => 1,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_POSTFIELDS => $postfields,
        CURLOPT_INFILESIZE => $filesize,
        CURLOPT_RETURNTRANSFER => true
    ); // cURL options
    curl_setopt_array($ch, $options);
    curl_exec($ch);
    if(!curl_errno($ch))
    {
        $info = curl_getinfo($ch);
        if ($info['http_code'] == 200)
            $errmsg = "File uploaded successfully";
    }
    else
    {
        $errmsg = curl_error($ch);
    }
    curl_close($ch);
}
else
{
    $errmsg = "Please select the file";
}
}

html表单应类似于:

<form action="uploadpost.php" method="post" name="frmUpload" enctype="multipart/form-data">
<tr>
  <td>Upload</td>
  <td align="center">:</td>
  <td><input name="file" type="file" id="file"/></td>
</tr>
<tr>
  <td>&nbsp;</td>
  <td align="center">&nbsp;</td>
  <td><input name="btnUpload" type="submit" value="Upload" /></td>
</tr>


 类似资料:
  • 我试图在PHP中使用multipart/form-data头发布一个带有cURL的图像,因为我发送到的API期望图像以多部分形式发送。 我没有问题与API与其他请求;只有张贴图像是一个问题。 我在客户端使用此表单: 请求头中的content-type现在显示正确了。但是图像似乎没有像API所期望的那样正确地发送。不幸的是,我无法访问API... 感谢您的帮助,谢谢

  • 所以我有一个网站,我正在建设,它将使用数据库中的数据来填写不同网站上的表格。现在我明白了,这可以很容易地用cURL或python来完成,但是,当我截取和读取post数据时,通常会非常混乱。例如,在此表单中,只有注释和分级选项,但包含所有类型的其他垃圾:

  • 以下API使用postman工作: Spring boot,后端代码: ReactJS,前端代码:我在中有对象数组。 触发功能的按钮: 我需要将我的前端(ReactJS)代码更改为,就像我使用postman发布请求一样。当前JS代码导致以下错误响应: Servlet。路径为[]的上下文中的servlet[dispatcherServlet]的service()引发了异常[请求处理失败;嵌套异常为o

  • 我正在尝试使用facebook api从保存在页面上的画布上传图像: 这是blob转换器: 我收到一个错误:,因此上传者似乎无法识别该blob为有效文件。 更新1: 我发了这篇帖子:将数据URI转换为文件,然后将其附加到FormData关于将blob转换为FormData,尝试如下: 但还是一样的错误。 更新2: 甚至尝试过这个XHR post解决方案,使用Facebooks javascript

  • 我已经创建了一个使用“多部分/表单数据”的控制器 采样器请求对象 现在,我将尝试使用模拟MVC测试它,但我不知道如何将“多部分/表单数据”作为内容传递。我看到很多使用JSON的示例,但没有使用多部分/表单数据 有没有一种方法可以完成我的请求与多部分/form_data?理想情况下,它需要在MockHttpServletRequest的主体中

  • 我有一个问题与上传多部分形式的图像 下面是我从这个答案中使用的代码 然后我使用NSURLSession来应用请求 服务器说我没有选择要上传的图像,我现在只想上传图像 我必须使用图像路径上传任何图像或它的数据就足够了吗? 我是否错过了任何事情,任何有助于理解这一点的帮助?