Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP将文件上载到Synology diskstation_Php_File_Curl_Upload_Synology - Fatal编程技术网

如何使用PHP将文件上载到Synology diskstation

如何使用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',

我想发布到Synology磁盘,并用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);
    ?>
根据文件,有一个“未知的文件操作错误”。此外,使用“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}"