亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在curl中將原始圖像數據作為多部分/表單數據發布

在curl中將原始圖像數據作為多部分/表單數據發布

PHP
慕婉清6462132 2019-11-02 10:37:56
我正在嘗試使用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 setcurl_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 ...任何幫助表示贊賞,謝謝
查看完整描述

2 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

從PHP 5.6開始@$filePath,CURLOPT_POSTFIELDS如果不CURLOPT_SAFE_UPLOAD進行設置,它將無法使用,并且在PHP 7中將其完全刪除。您將需要使用CurlFile對象RFC此處。


$fields = [

    'name' => new \CurlFile($filePath, 'image/png', 'filename.png')

];

curl_setopt($resource, CURLOPT_POSTFIELDS, $fields);


查看完整回答
反對 回復 2019-11-02
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

如果任何人有同樣的問題:檢查這是@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>


查看完整回答
反對 回復 2019-11-02
  • 2 回答
  • 0 關注
  • 568 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號