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

时间:2017-07-17 06:20:35

标签: php file curl upload synology

我想发布到Synology Disksation并使用PHP上传文件。 Synology的API为我提供了一个我想用PHP调用的界面。请参阅以下文档。

https://global.download.synology.com/download/Document/DeveloperGuide/Synology_File_Station_API_Guide.pdf#%5B%7B%22num%22%3A111%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C69%2C711%2C0%5D

这是我的代码,我用于帖子:

    <?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?

2 个答案:

答案 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