我想发布到Synology Disksation并使用PHP上传文件。 Synology的API为我提供了一个我想用PHP调用的界面。请参阅以下文档。
这是我的代码,我用于帖子:
<?php
$params = array(
'path' => '/home/upload',
'create_parents' => 'true',
'overwrite' => 'true',
'api' => 'SYNO.FileStation.Upload',
'version' => 2,
'method' => 'upload'
'_sid' => [id of session after authenticate],
'file[]' => "@".path_to_file
);
$ch = curl_init();
$BODY = http_build_query($params);
curl_setopt($ch, CURLOPT_URL, 'http://ip_of_diskstation:5000/entry.cgi');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $BODY);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
var_dump($result);
?>
此调用有效,但是diskstation为我提供了以下JSON。
{"error":{"code":401},"success":false}
根据文档,文件操作存在&#34;未知错误&#34;。另外,使用&#34; file_get_contents(文件路径)&#34;而不是&#34; @&#34; .path_to_file从磁盘站给我同样的错误。
如何将文件和参数发布到synology diskstation?
答案 0 :(得分:0)
您可以尝试在您的网络API中添加_sid,例如http://ip_of_diskstation:5000/entry.cgi?_sid=
我使用nodejs请求库使其工作。
以下是代码:
let r = request.post( { url: `${web_url}/entry.cgi?_sid=${sid}` }, ( err, response, body ) => {
return callback( err, response );
});
let form = r.form();
form.append( 'api', 'SYNO.FileStation.Upload');
form.append( 'version', '2');
form.append( 'method', 'upload' );
form.append( 'overwrite', 'false' );
form.append( 'path', '<shared folder path>');
form.append( 'create_parents', 'true' );
form.append( '_sid', sid );
form.append( 'file', fs.createReadStream( file ), { 'filename' : <filename without the path>});
此致
菲利克斯
答案 1 :(得分:0)
您得到了:
"{"error":{"code":401},"success":false}"
因为官方文件有误。
有关详细信息,请参见Upload file through FileStation upload api。