【问题标题】:Command-line utility for WebDAV upload用于 WebDAV 上传的命令行实用程序
【发布时间】:2010-11-15 08:40:23
【问题描述】:

我需要一个可以进行 WebDAV 上传 (HTTP PUT) 的命令行实用程序。

【问题讨论】:

    标签: webdav


    【解决方案1】:

    cURL 会为你做这件事。

    curl -T filetoput.xml http://www.url.com/filetoput.xml
    

    【讨论】:

    • 在 WebDAV 的情况下,如果没有一个非常微小但重要的细节,您的示例将无法工作 -> 包括您希望远程拥有的文件的名称。所以: curl -T filetoput.xml url.com/filetoput.xml
    • @Cninroh:我不相信这是真的。根据 curl 手册页:“如果指定的 URL 中没有文件部分,Curl 将附加本地文件名。注意,您必须在最后一个目录上使用尾随 / 才能真正向 Curl 证明没有文件名或curl 会认为你最后一个目录名是要使用的远程文件名。”
    • +1,cURL 获胜。而如果需要认证,可以使用curl -T <filename> -u <username>:<password> <url>
    • 你也可以使用-o /dev/stdout获取进度输出
    • 实际上,从目标 URL 中省略文件部分会导致 HTTP 错误 409 CONFLICT,以防目标服务器是 IIS 服务器,至少达到并包括 IIS 10。也许 IIS 是错误的它应该按照规格工作,只是说。
    【解决方案2】:

    对于 unix(以及安装了 Cygwin 的 Windows),您可以使用 Cadaver

    【讨论】:

      【解决方案3】:

      最常用的命令行 HTTP 实用程序似乎是 cURL,它将使用 -T option 执行 PUT。不过,您需要了解相当多的 WebDAV 协议才能做更多的事情,而不是使用它进行上传。

      【讨论】:

        【解决方案4】:

        如果您需要通过 WebDAV 上传整个目录而不是一个文件,您可以使用以下方法。

        假设您有以下要通过 WebDAV 上传的本地文件夹。

        local_folder_to_upload
        │   test.txt
        │   test1.txt    
        │
        └───nested_folder1
        │   │   file1.txt
        │   │   file2.txt
        │   │
        │   └───nested_folder2
        │       │   file11.txt
        │       │   file12.txt
        

        1.首先,您需要从服务器上的本地文件夹(如果有的话)创建嵌套目录。由于 WebDAV 不支持递归上传,因此您必须在单独的步骤中执行此操作(if you were to use ftp - 您将添加 --ftp-create-dirs 标志来执行此操作)。要通过 WebDAV 创建这些文件夹,您需要使用 MKCOL method

        curl -X MKCOL 'http://your.server/uploads/nested_folder1' --user 'name:pwd'
        curl -X MKCOL 'http://your.server/uploads/nested_folder1/nested_folder2' --user 'name:pwd'
        

        请注意,您不能根据to the spec在一个请求中创建它们。

        如果请求创建集合 /a/b/c/d/,并且 /a/b/c/ 不存在,请求一定失败。

        2.其次,您可以利用find shell 命令的输出,使用curl 将其上传到您的服务器。

        cd local_folder_to_upload && find . -exec curl -T {} 'http://your.server/uploads/{}' --user 'name:pwd' \;
        

        上面的代码循环遍历给定目录中的所有文件(使用查找),并将输出(带有相对路径的文件名)添加到网络服务器 url 中的占位符 {}。因此它会发出多个请求(每个文件一个),并且由于所有嵌套文件夹都是预先创建的 - 这些请求不应失败。

        希望它对某人有所帮助。

        【讨论】:

          【解决方案5】:

          免费WinSCP(适用于 Windows)支持 WebDAV(和 WebDAVS)。
          WinSCP 也支持脚本/命令行操作。

          通过 WebDAV 上传文件的 WinSCP 脚本示例:

          open https://user@webdav.example.com/
          put file.txt /path/
          exit
          

          将脚本保存到文件(例如script.txt)并运行如下:

          winscp.com /script=script.txt
          

          您也可以将所有内容放在一行中:

          winscp.com /command "open https://user@webdav.example.com/" "put file.txt /path/" "exit"
          

          introduction to scripting with WinSCP开头。

          你甚至可以拥有WinSCP GUI generate the script file for you

          (我是 WinSCP 的作者)

          【讨论】:

            【解决方案6】:

            另一个选项是“davix”

            https://dmc.web.cern.ch/projects/davix/home

            它已经分离了 davix-mkdir davix-put 等实用程序 您可以在 URL 中指定学分,例如

             davix-mkdir http://user:passw@example.com/dir_to_create
             davix-put local_file http://user:passw@example.com/dir_to_create/remote_file_name
            

            【讨论】:

              【解决方案7】:

              this overview 包含一个完整的 webdav 服务器和客户端列表。

              我会选择尸体,或者,如果我的需求非常具体,我会选择使用 PyWebDAV 库的 python 脚本。

              【讨论】:

                【解决方案8】:

                在 KDE 下使用 KIO:

                kioclient cp file.txt 'webdavs://user@webdav.example.com:443/'
                

                【讨论】:

                  【解决方案9】:

                  Teleric Fiddler 有一个“撰写”选项卡,您可以在其中创建自己的 自己定制的 WebDAV 请求。例如。 PROPFIND 和 OPTIONS 等。

                  【讨论】:

                    猜你喜欢
                    • 2012-08-06
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-09-03
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-09-02
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多