Sto cercando di submit file a un'API di terze parti dalla mia app PHP. Funziona dalla row di command:
curl -F "[email protected]_file.MOV" "https://upload.wistia.com?project_id=pbmcmua3ot&username=api&api_password=xxxxx_apikey_yyyyy"
Ma non riesco a farlo funzionare usando il curl di PHP:
$data = arrays( 'username' => $username, 'api_password' => $api_password, 'file' => fopen($tmp_filename, 'r'), 'project_id' => $project_hashed_id, ); $ch = curl_init(); //curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout curl_setopt($ch, CURLOPT_INFILE, fopen($tmp_filename, 'r') ); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($tmp_filename)); curl_setopt($ch, CURLOPT_VERBOSE, 1); //for debugging curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $result = curl_exec($ch); curl_close($ch); return json_decode($result);
Penso che CURLOPT_INFILE
sia il problema ma non ne sono sicuro. Grazie in anticipo per qualsiasi aiuto tu possa darmi.
Update1
$data = arrays( 'username' => $username, 'api_password' => $api_password, 'file' => '@'.$tmp_filename, 'project_id' => $project_hashed_id, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($tmp_filename)); curl_setopt($ch, CURLOPT_VERBOSE, 1); //for debugging curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); curl_close($ch); return json_decode($result);
AGGIORNAMENTO 2 (lavoro)
$data = arrays( 'api_password' => $api_password, 'file' => '@'.$tmp_filename, 'project_id' => $project_id ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); curl_close($ch);
Non è necessario aprire una maniglia per arricciare, basta avere
$data = arrays( 'file' => '@move_file.MOV' );
Curl vedrà il @
e lo tratterà come un tentativo di upload di file. Inoltre non devi fare anche http_build_query()
. Curl può accettare direttamente una matrix e fare la query costruendo se stessa:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);