4

cURLを使用して、生のバイナリファイルを他のデータと一緒にPOSTで送信しようとしています。基本的に、私はそれをしました:

//Here i create the CURLFile
$cfile = new CURLFile($fullpath,'application/xml', $filename); 

//Data to upload (including the file)
$data_upload = array('username' => $username, 
                     'password' => $password, 
                     'owner' => $owner, 
                     'destination' => $pathpda, 
                     'filename' => $filename, 
                     'filedata' => $cfile);
//Upload
$ch_upload = curl_init($urlws.$e_upload);
curl_setopt($ch_upload, CURLOPT_POST,true);
curl_setopt($ch_upload, CURLOPT_POSTFIELDS, $data_upload);
curl_setopt($ch_upload, CURLOPT_RETURNTRANSFER, true);
$response_upload = curl_exec($ch_upload);
curl_close($ch_upload); 

すべてがうまくいきました。ただし、ファイルをディスク上の実際のファイルではなく、単なるバイナリ データにする必要があります。また、リクエストで他のデータを送信する必要があります。誰もそれを行う方法を知っていますか? Google で調べましたが、未加工のバイナリ ファイルとその他のデータを送信して、両方を行う方法を見つけることができませんでした。ありがとう!

更新私の質問をさらに明確にするために、ランダムなバイナリデータを送信する必要はなく、コンテンツが ob_get_contents() から取得されたファイル(たとえば)を送信する必要がないため、ディスク上の物理ファイルではありません。CURLfile を置き換えて、バイナリ ファイル データを「filedata」変数で送信するだけでは、うまくいきません。Web サービスがファイルを認識しません。実際のファイルを指定せずに CURLfile を作成する方法があるかもしれません。

4

2 に答える 2

0

他の変数の場合とまったく同じ方法です。最終的に、すべてが「バイナリ」として、または実際には文字列表現で送信されます。

だからただする

$content = ob_get_contents();
//or file_get_contents() or whatever source
$data_upload = array('username' => $username, 
                 'password' => $password, 
                 'owner' => $owner, 
                 'destination' => $pathpda, 
                 'filename' => $filename, 
                 'filedata' => $cfile,
                 'allkindsofdata' => $content );
于 2015-11-03T12:36:30.057 に答える