如何使用PHP将文件上载到Synology diskstation
我想发布到Synology磁盘,并用PHP上传一个文件。Synology的API为我提供了一个我想用PHP调用的接口。请参阅下面的文档 这是我的代码,我用它来写这篇文章:如何使用PHP将文件上载到Synology diskstation,php,file,curl,upload,synology,Php,File,Curl,Upload,Synology,我想发布到Synology磁盘,并用PHP上传一个文件。Synology的API为我提供了一个我想用PHP调用的接口。请参阅下面的文档 这是我的代码,我用它来写这篇文章: <?php $params = array( 'path' => '/home/upload', 'create_parents' => 'true', 'overwrite' => 'true',
<?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);
?>
根据文件,有一个“未知的文件操作错误”。此外,使用“file_get_contents(path to file)”而不是“@”。path_to_file会在diskstation中产生相同的错误
如何将文件和参数发布到synology diskstation?能否尝试在web api url中添加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>});
let r=request.post({url:`${web\u url}/entry.cgi?\u sid=${sid}}},(err,response,body)=>{
返回回调(错误、响应);
});
设form=r.form();
append('api','SYNO.FileStation.Upload');
form.append('version','2');
append('method','upload');
form.append('overwrite','false');
form.append('path','');
form.append('create_parents','true');
格式。追加(''u sid',sid);
append('file',fs.createReadStream(文件),{'filename':});
问候,
Felix你会得到:
"{"error":{"code":401},"success":false}"
因为官方文件是错误的
有关详细信息,请参阅。
401
状态代码通常表示未经授权
。您对\u sid
的值有信心吗?在使用这个API之前,您需要在Diskstation上启用一些东西吗?在调用“http://[ip\u of_Diskstation]:5000/webapi/auth.cgi?API=SYNO.API.auth&version=2&method=login&account=[username]&passwd=[pass]&session=DownloadStation&format=cookie”之后,我得到JSON{“data”:“sid”:“成功”:true}。在上面的代码中,我使用这个“sid”进行上传调用。在Synology API的文档中,401的含义与HTTP不同。你有没有让它工作过?
"{"error":{"code":401},"success":false}"