错误400使用Curl在Alfresco上传PDF

时间:2016-02-04 13:15:03

标签: php curl alfresco

我尝试在Alfresco Enterprise 4中上传PDF文件。我的PHP调用curl操作:

$curl_request = curl_init();
curl_setopt($curl_request, CURLOPT_URL, 'http://myalfresco:80/alfresco/service/api/upload?alf_ticket=TICKET_1c75b3391fc2b8a60a1ab92dd1xxx');
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_request, CURLOPT_HEADER, false);
curl_setopt($curl_request, CURLOPT_POST,true);
curl_setopt($curl_request, CURLOPT_POSTFIELDS,array('filedata'=>'@/var/tmp/QDL_Attrib_29.pdf','destination'=>'workspace://SpacesStore/71a79d5f-326d-4671-8fee-5ffef2540e2d'));
$result = curl_exec($curl_request);

我收到了这个错误:

  

“status”:{       “代码”:400,       “名称”:“不良请求”,       “description”:“客户端发送的请求在语法上是不正确的。” },
       “message”:“缺少必需的参数”

如果我尝试直接在命令行中使用curl运行我的调用,就像这样,它可以工作......我不明白我的问题......

  

curl -v -X POST -F filedata =@/var/tmp/QDL_Attrib_29.pdf -F   目的地=工作区:// SpacesStore / 71a79d5f-326D-4671-8fee-5ffef2540e2d   http://myalfresco:80/alfresco/service/api/upload?alf_ticket=TICKET_1c75b3391fc2b8a60a1ab92dd1xxx

如果我在命令行中显示卷曲标题:

POST /alfresco/service/api/upload?alf_ticket=TICKET_1c75b3391fc2b8a60a1ab92dd1xxx HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: myalfresco
> Accept: */*
> Content-Length: **29447**
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=----------------------------530a6362a7da

在PHP中:

POST /alfresco/service/api/upload?alf_ticket=TICKET_1c75b3391fc2b8a60a1ab92dd1xxx HTTP/1.1
Host: myalfresco
Accept: */*
Content-Length: **339**
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------362fa1523053

这意味着curl可以使用PHP方法获取文件...

3 个答案:

答案 0 :(得分:2)

您需要传递文件名。

说实话,我还没有测试过,我不记得我通常传递的内容,但这是Alfresco中返回错误的代码:

line="hello welcome"
if [ -z "$line" ] ; then
echo "String null"
fi

我的假设,尚未测试,是卷曲自动添加文件名。

答案 1 :(得分:1)

可能是您已经将具有相同文件名的文件上传到同一文件夹(使用命令行)。

尝试清理目标文件夹并再次执行该代码。

注意This page建议你可以添加一个布尔覆盖参数来强制覆盖现有文件。

编辑1:尝试检查PHP用户是否有权访问您要求附加的文件!

编辑2:如果它仍然不起作用,并且您确定php用户对该文件具有适当的权限,请尝试此'filedata'=>'@/var/tmp/QDL_Attrib_29.pdf;filename=QDL_Attrib_29.pdf;type=application/pdf'

答案 2 :(得分:0)

我已经解决了我的问题:

$curl_request = curl_init();
curl_setopt($curl_request, CURLOPT_URL, 'http://localhost:8080/alfresco/service/api/upload?alf_ticket=<ALFRESCP_LOGIN_TICKET>');
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_request, CURLOPT_HEADER, false);
curl_setopt($curl_request, CURLOPT_POST,true);
$args = new CurlFile('<PATH_TO_THE_FILE.EXTENSION>','<MIMETYPE like image/png>','<FILENAME as it is sent for upload>');
curl_setopt($curl_request, CURLOPT_POSTFIELDS, array('destination'=>'<DESTINATION_NODEREF>','filedata'=>$args));
$result = curl_exec($curl_request);

参数&#34; filedata&#34;在Post字段中必须是要发送给Alfresco的CurlFile。