我正在尝试使用以下PHP代码将文件上传到Redmine。
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url)
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/octet-stream',
'X-Redmine-API-Key: ' . $apiKey));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, TRUE);
$data = array('file' => '@' . $filePath);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_POST, 1);
$token = curl_exec($curl);
此请求返回有效的上传令牌,但上传过程中文件已损坏。例如,尝试上传空的.txt文件会导致上传的覆盖.txt文件现在包含以下行。
------------------------------ dde946a683ac
内容 - 处置:表单数据; NAME = “文件”; 文件名= “/无功/网络/可湿性粉剂内容/上传/ redmine_uploads / emptyTextFile.txt” Content-Type:application / octet-stream
------------------------------ dde946a683ac -
为什么会发生这种情况?
答案 0 :(得分:4)
想出来。将我的代码修改为
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url)
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/octet-stream',
'X-Redmine-API-Key: ' . $apiKey));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$file = fopen($filePath, 'r');
$size = filesize($filePath);
$filedata = fread($file,$size);
curl_setopt($curl, CURLOPT_POSTFIELDS, $filedata);
curl_setopt($curl, CURLOPT_INFILE, $file);
curl_setopt($curl, CURLOPT_INFILESIZE, $size);
curl_setopt($curl, CURLOPT_POST, 1);
$token = curl_exec($curl);
产生所需的文件上传。
答案 1 :(得分:0)
尝试在CURLOPT_POSTFIELDS
数组中添加名称值。
$data = array('name' => 'SomeName', 'file' => '@' . realpath($filePath));
另外,您no longer need CURLOPT_BINARYTRANSFER
。