【问题标题】:Uploading files to an ownCloud server programmatically以编程方式将文件上传到 ownCloud 服务器
【发布时间】:2014-09-05 15:31:00
【问题描述】:

我正在尝试设置一个 Web 应用程序,其中许多客户端可以通过 Node.js http 服务器进行连接,然后上传/下载文件,然后这些文件将显示在不同的显示器中。我正在考虑将这些文件存储在可以集成到我的应用程序中的免费云服务中。哦,我也在这个项目中使用socket.IO。

Dropbox 提供了一些 API 来执行此操作:https://www.dropbox.com/developers,但我正在寻找像 ownCloud 这样的免费解决方案,我可以在其中拥有更大的存储空间并拥有自己的私人服务器。

有人知道这是否可以做到吗?或者可以提供有关我的问题的替代解决方案的任何提示?我真的很感激任何帮助,因为我对这一切都很陌生。

【问题讨论】:

    标签: javascript node.js file-upload socket.io owncloud


    【解决方案1】:

    @Javier Gonzalez,上传文件...

    错误的选择:

    curl -X PUT "http://yourserver.com/owncloud/remote.php/webdav/file.zip" -F myfile=@"/Users/Javi/Downloads/file.zip"
    

    因为,上传的文件将包含 http 标头。

    更好的选择:

    curl -X PUT "http://yourserver.com/owncloud/remote.php/webdav/file.zip" --data-binary @"/Users/Javi/Downloads/file.zip"
    

    或者直接使用 curl -T 文件名 url 上传

    【讨论】:

    • 您好,谢谢您知道如何使用 API 创建文件夹吗?
    • 确保使用没有空格等的有效目标 URL 或转义它们。 CURL 不是为你做的。
    • @TomasSykora 您可以使用 curl 和 webdav 在 ownclod 中创建文件夹。这是创建以当前日期为名称的文件夹的方法: curl -u user:pass -X MKCOL "example.org/owncloud/remote.php/webdav/$(date '+%d-%b-%Y')" 参见文档:doc.owncloud.org/server/7.0/user_manual/files/…
    • @iGbanam 如何上传 $_files 数组?如果我从表单上传,我无法指定上传文件的路径。
    【解决方案2】:

    您必须与http://yourowncloudserver.com/owncloud/remote.php/webdav/的WebDav接口通信

    要上传文件,您必须对文件的命运发出 PUT 请求,例如: http://yourowncloudserver.com/owncloud/remote.php/webdav/file.zip

    并将输入流添加到读取文件的请求中。

    这是 CURL 命令:

    curl -X PUT -u username:password "http://yourserver.com/owncloud/remote.php/webdav/file.zip" -F myfile=@"/Users/Javi/Downloads/file.zip"
    

    您还可以检查我们在 Objective C 上的代码以检查我们使用的参数: ownCloud iOS Library

    NSMutableURLRequest *request = [self requestWithMethod:@"PUT" path:remoteDestination parameters:nil];
    [request setTimeoutInterval:k_timeout_upload];
    [request setValue:[NSString stringWithFormat:@"%lld", [UtilsFramework getSizeInBytesByPath:localSource]] forHTTPHeaderField:@"Content-Length"];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setHTTPShouldHandleCookies:NO];
    //[request setHTTPBody:[NSData dataWithContentsOfFile:localSource]];
    
    __weak __block OCHTTPRequestOperation *operation = [self mr_operationWithRequest:request success:success failure:failure];
    
    [operation setInputStream:[NSInputStream inputStreamWithFileAtPath:localSource]];
    

    【讨论】:

    • 谢谢! :) 这就是我需要的!
    • 下面列出了更好的答案,正如@Frank Lu所说,如果上传的文件不是作为二进制数据发送,使用curl的这种方法将被损坏。
    【解决方案3】:

    作为现有答案的补充,我使用以下函数作为别名:

    cloud() {
      curl -X PUT -u "<username>:<password>" "https://<hostname>/remote.php/webdav/${2:-$1}" --data-binary @"./$1"
    }
    

    只需替换 &lt;username&gt;&lt;password&gt;&lt;hostname&gt; 并将其放入您的 .bash_aliases 中,您就可以上传文件:

    cloud filename
    cloud path filename
    

    【讨论】:

      【解决方案4】:

      最简单的方法是使用owncloud的webdav界面

      【讨论】:

        【解决方案5】:

        在 windows 和 owncloud 8 中使用 curl。我发现传输文件的唯一方法是使用此命令

        curl -u user:password --upload-file "c:\path to file\srcfile" "https://ocserver/owncloud/remote.php/webdav/tgtfile"
        

        希望对你有帮助

        【讨论】:

          【解决方案6】:

          上传文件您必须对文件的命运发出 PUT 请求,例如:http://yourOwnCloudServer/remote.php/webdav/text.txt

          这是 CURL 命令:

          curl -X PUT -u username:password "http://yourOwnCloudServer/remote.php/webdav/text.txt" -F myfile=@"/Users/gokul/Desktop/text.txt"
          

          您也可以将--data-binary 用于媒体文件。

          "http://yourOwnCloudServer/remote.php/webdav/image.jpg" --data-binary @"/Users/gokul/Desktop/image.jpg"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-05
            • 1970-01-01
            相关资源
            最近更新 更多