使用curl上传文件到Owncloud

4
我已经编写了一个应用程序,需要将一些文件上传到多台移动设备。目前,我正在使用Dropbox,我有一个应用程序(https://www.dropbox.com/developers),因此我可以将任何数据上传到客户的Dropbox中。
现在,由于一些安全问题,我想切换到ownCloud。我已经阅读了这篇文章:Uploading files to an ownCloud server programatically,但不幸的是它没有帮助到我。
我尝试过
curl -X PUT -u username:password "http://myserver.com/owncloud/remote.php/webdav/test" -F f=@"/tmp/test"

文件已上传,但出现问题:我的文件被添加了某种标头。
原始测试文件:
test
上传的文件:
--------------------------00c5e21306fd0b2d Content-Disposition: form-data; name="f"; filename="test" Content-Type: application/octet-stream 这是一个测试。 --------------------------00c5e21306fd0b2d--
虽然对于任何文本文件来说这真的很烦人,但对于像JPG等二进制文件来说,这是一场灾难,因为它们上传后就无法打开。
这就是为什么我尝试了另一种可能的方法,如所述:
mischka@lappy:/tmp$ curl -X PUT -u 'username:password' "http://myserver/owncloud/remote.php/webdav/test" --data-binary @"/tmp/test"
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>Sabre\DAV\Exception\BadRequest</s:exception>
  <s:message>expected filesize 19 got 0</s:message>
</d:error>

但结果更糟糕了!

有人能告诉我,我做错了什么吗?

2个回答

10

-F 表示表单上传,你应该使用 --data-binary 替代:

curl -X PUT -u username:password 
"http://myserver.com/owncloud/remote.php/webdav/test" --data-binary @"/tmp/test"

1
要上传文件,您需要向文件目标发出PUT请求,例如:http://yourOwnCloudServer/remote.php/webdav/text.txt。以下是CURL命令:
curl -X PUT -u username:password "https://yourOwnCloudServer/remote.php/webdav/text.txt" -F myfile=@"/Users/gokul/Desktop/text.txt"

您也可以使用--data-binary处理媒体文件。
"https://yourOwnCloudServer/remote.php/webdav/image.jpg" --data-binary @"/Users/gokul/Desktop/image.jpg"

请记得使用HTTPS,否则在大多数owncloud安装中会出现错误响应

<p>The document has moved <a href="https://yourOwnCloudServer/remote.php/webdav/test">here</a>.</p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接