このウェブサイトのこのトピックに関する多くの回答はありますが、何も役に立ちません。php curl multipart/form-data:ファイルの内容が投稿されていません
私はボックスにファイルを投稿しようとしています(クラウドストレージ)。簡単なはずですが、そうではありません。
私はRequestBinを使用してデバッグします。
コマンドラインでカールを使用して、それが(ファイルがボックスに投稿された)素晴らしい作品:
curl https://requestb.in/1bw1 -H "Authorization: Bearer supersecret" -H "Content-Type: multipart/form-data" -X POST -F [email protected]/tmp/testfile.pdf
同じことをやろうとして応答がないと(それが失敗したカールPHPで(ボックスにファイルをアップロード)ファイルコンテンツが見つからないことを意味します)。
私のPOSTが異なって見えることもRequestBinにあります。
カールCLI(正しい):
RAW BODY
-------------------------- ---- cd86e864290b コンテンツの処理:フォームデータ。
{"name": "testfile.pdf"、 "parent":{"id": "40801665641"}} --------------- --------------- cd86e864290b コンテンツの処理:フォームデータ。 name = "file";ファイル名= "testfile.pdf" のContent-Type:アプリケーション/ octet-streamの
RIFFäÊWAVEfmt...
カールPHP(正しくない):
RAW BODY
------------------------------ 7ab3fffab8c6 コンテンツの処理:フォームデータ。
{"name": "testfile.pdf"、 "parent":{"id": "42035106321"}} --------------- --------------- 7ab3fffab8c6 コンテンツの処理:フォームデータ。名前= "ファイル"
@ ../faxout/testfile.pdf ------------------------------ 7ab3fffab8c6 -
これは同じではなく、同じ結果を得る方法がわかりません。
私のPHPコード:
$dataFile = array(
'name' => $faxfilename,
'parent' => array(
'id' => $subfolderID,
)
);
$PostData= array(
'attributes' => json_encode($dataFile),
'file' => "@$target"
);
$headers3=array(
"Authorization: Bearer supersecret",
"Content-Type: multipart/form-data"
);
//$filesurl = "https://upload.box.com/api/2.0/files/content";
$filesurl = 'https://requestb.in/1bw1';
$curlFILE = curl_init();
curl_setopt_array($curlFILE, array(
CURLOPT_URL => $filesurl,
CURLOPT_HTTPHEADER => $headers3,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $PostData,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE
));
私が試してみました:
CURLOPT_POSTFIELDS => http_build_query($PostData),
を私が試してみました:
'@'.realpath($target)
私はただの正しい形式を取得していないようです私が投稿したいファイル。
ありがとうございます。私はCURLFile()オブジェクトを知っています。これを使用する私の唯一の問題は、私はPHPのバージョン5.4.36を持っていることです。だから、これは私のための選択肢ではありません。 – user2795648
@ user2795648あなたのPHPバージョンは古く、安全でなく、重大なセキュリティアップデート(バグフィックスやアップデートなど)を受け取っていないので、自分で好きで5.6にアップグレードしてください。 (CURLOPT_SAFE_UPLOADを使わないで)5.5+で動作しませんでしたが、それは5.4のバージョンは 'CURLOPT_POSTFIELDS =>配列( 'ファイル' => '@/tmp/testfile.pdf' ) PHP 7.0以降で動作します。 – hanshenrik