Mayan EDMS API问题:无法将文档添加至文件柜
Mayan EDMS API 添加文档到文件柜返回"Not found." 问题排查与解决
以下是针对你遇到的问题的排查步骤和修正方案:
一、常见问题排查点
1. 验证文件柜标识符正确性
确保$cabinet变量的值是Mayan EDMS中目标文件柜的有效ID或slug(短标识)。可以先调用GET /api/v4/cabinets/接口获取所有文件柜列表,核对你要使用的文件柜参数是否正确——很多时候错误的ID/slug会直接导致"Not found"。
2. 修正请求体参数名
Mayan EDMS v4的API中,添加文档到文件柜的请求体参数应为复数形式documents,而非你代码中的document。修改后的数据结构:
$data = array( 'documents' => [$document_id], );
3. 确认文档ID有效性
检查$document_id是否为已成功创建的文档的有效ID。可通过GET /api/v4/documents/{document_id}/接口验证文档是否存在且状态正常。
4. 修正API端点URL
v4版本的正确端点是/api/v4/cabinets/{cabinet_id}/documents/,不需要/add/后缀。修改请求URL:
$request_url = 'http://example.com/api/v4/cabinets/' . $cabinet . '/documents/';
5. 修复请求头设置
你的代码中缺少设置请求头的关键步骤,需要添加curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);来传递Authorization、Content-Type等必要头信息。同时建议去掉手动设置的Content-Length,curl会自动计算并添加,避免长度不匹配的问题。
二、修正后的完整代码示例
// Add document to cabinet $cabinet = $params['cabinet']; $document_id = '你的有效文档ID'; // 替换为实际文档ID // 修正参数为复数documents $data = array( 'documents' => [$document_id], ); $post_data = json_encode($data); // 修正API端点,移除/add/后缀 $request_url = 'http://example.com/api/v4/cabinets/' . $cabinet . '/documents/'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); $headers = []; $headers[] = 'Accept: application/json'; $headers[] = 'Content-Type: application/json'; $headers[] = 'Authorization: Basic YWRtaW46QndLcFNaQnJURDI3MzN5'; // 关键:设置请求头 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); // 调试用:打印错误和请求详情 if(curl_errno($ch)){ echo 'Curl错误: ' . curl_error($ch); } echo "发送的请求头:\n" . curl_getinfo($ch, CURLINFO_HEADER_OUT); echo "\nAPI响应:\n" . $result; curl_close($ch);
三、额外调试建议
- 运行代码时查看打印的请求头和URL,确认没有拼写错误或参数错误
- 如果仍有问题,尝试用Postman等工具直接调用修正后的API端点,排除代码层面的问题
内容的提问来源于stack exchange,提问作者crafter
相关产品推荐
相关产品推荐

