数据:文件内容未发布
在这个网站上关于这个主题的许多答案,但没有人帮助我。
我试图将文件发布到框(云存储)。 应该很容易,但事实并非如此。
我使用RequestBin进行调试。
在命令行中使用curl时,它效果很好(文件发布到Box):
curl https://requestb.in/1bw1 -H "Authorization: Bearer supersecret" -H "Content-Type: multipart/form-data" -X POST -F file=@/tmp/testfile.pdf
当试图用php curl执行相同的操作(将文件上传到Box)时,它会失败(根本没有响应,这意味着无法找到文件内容)。
我还在RequestBin上看到我的POST看起来不一样。
卷曲cli(正确):
RAW身体
------------------------------ cd86e864290b Content-Disposition:form-data; NAME = “属性”
{“name”:“testfile.pdf”,“parent”:{“id”:“40801665641”}} ------------------------- ----- cd86e864290b内容处理:form-data; NAME = “文件”; filename =“testfile.pdf”Content-Type:application / octet-stream
RIFFäÊWAVEfmt...
卷曲php(不正确):
RAW身体
------------------------------ 7ab3fffab8c6内容处理:表单数据; NAME = “属性”
{“name”:“testfile.pdf”,“parent”:{“id”:“42035106321”}} ------------------------- ----- 7ab3fffab8c6内容处理:表单数据; NAME = “文件”
@ .. / 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。
$curlFILE = curl_init ();
curl_setopt_array ( $curlFILE, array (
CURLOPT_URL => 'https://requestb.in/1bw1',
CURLOPT_HTTPHEADER => array (
"Authorization: Bearer supersecret"
),
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => array (
'file' => new CURLFile ( '/tmp/testfile.pdf' )
),
//CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE
) );
curl_exec($curlFILE);
另外,当使用multipart / form-data或application / x-www-urlencoded编码时,不要手动设置内容类型标题,curl会自动为你设置合适的标题,而不像你,curl不会做任何这样做的错字。
此外,如果在设置选项时出现问题,curl_setopt_array会返回bool(false),并且您不应忽略这些错误,因此我建议使用此函数,而不是将任何curl setopt错误转换为RuntimeException
function ecurl_setopt_array($ch, array $options) {
if (! curl_setopt_array ( $ch, $options )) {
throw new RuntimeException ( 'curl_setopt_array failed. ' . curl_errno ( $ch ) . ': ' . curl_error ( $ch ) );
}
}
和protip,当调试curl代码时,启用CURLOPT_VERBOSE。
链接地址: http://www.djcxy.com/p/48799.html