使用php和curl将文件上传到alfresco

时间:2017-03-28 14:17:59

标签: php curl alfresco

我正在尝试使用php和curl将文件上传到alfresco。我可以通过运行以下表单命令行来上传文件:

curl -uadmin:admin -X POST http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-shared-/children -F filedata=@test.doc -F name=myfile.doc -F relativePath=uploads

将文件test.doc上传到uploads目录并将其重命名为myfile.doc。

现在我正在尝试在php中翻译此命令。这就是我所做的:

$url = 'http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-shared-/children?alf_ticket=TICKET_66....';
$fields = array(
    'filedata' => '@'.realpath('tmp_uploads/test.doc'),
    'name' => 'myfile.doc',
    'relativePath' => 'uploads'
);

$converted_fields = http_build_query($fields);

$ch = curl_init();

//set options
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-type: multipart/form-data"
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $converted_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //needed so that the $result=curl_exec() output is the file and isn't just true/false

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

但是,这不起作用并抛出以下错误,这不是很具描述性。

{"error":{"errorKey":"No disk space available","statusCode":409,"briefSummary":"02280051 No disk space available","stackTrace":"For security reasons the stack trace is no longer displayed, but the property is kept for previous versions","descriptionURL":"https://api-explorer.alfresco.com"}}

显然有很多可用的空间。任何的想法? 感谢

1 个答案:

答案 0 :(得分:1)

你的第一个错误是使用@ scheme,从PHP 5.5开始就不鼓励,在PHP 5.6中默认禁用,在PHP7中完全删除。使用CURLFile代替@。

你的第二个错误,就是使用http_build_query,它将以application/x-www-form-urlencoded格式对数据进行编码,而你的curl命令行以multipart/form-data格式上传它

你的第三个错误就是手动设置标题Content-Type: multipart/form-data,不要那样做,curl会为你做这件事(而且你现在的代码是,它根本不是multipart/form-data,而是{ {1}},带有谎言<​​/ strong>内容类型标题,这是至少有两个原因中的一个你不应该手动设置标题,另一个原因是你可能有拼写错误,libcurl不会(感谢自动libcurl发布单元测试))

这里的第四个错误不在你身上,但是服务器开发人员(露天开发人员?),服务器应该响应application/x-www-form-urlencoded响应,但是回复了一些错误HTTP 400 Bad Request错误,你应该向服务器开发者提交错误报告。

第五个错误是你的,你忘了用PHP代码中的CURLOPT_USERPWD设置用户名/密码。尝试

out of disk space