使用编程方式将文件上传到 ownCloud 服务器

8
我正在尝试建立一个 Web 应用程序,让许多客户端通过 Node.js http 服务器连接,然后上传/下载文件,这些文件随后将显示在不同的屏幕上。我考虑将这些文件存储在可以集成到我的应用程序中的免费云服务中。哦,我在这个项目中还使用了 socket.IO。
Dropbox 提供了一些 API 来实现这一点:https://www.dropbox.com/developers,但我正在寻找像 ownCloud 这样的免费解决方案,在那里我可以拥有更大量的存储空间,并拥有自己的私人服务器。
有没有人知道这是否可行?或者可以提供任何有关解决此问题的替代方案的提示?由于我对所有这些都很新,请帮助一下。
6个回答

13

@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上传。

1
嗨,谢谢。你有没有想法如何使用API创建文件夹? - Tomas Sykora
请确保使用有效的目标URL,不要包含空格等字符或对其进行转义。CURL不会为您执行此操作。 - Marcel Böttcher
3
@TomasSykora您可以使用curl和WebDAV在ownCloud中创建文件夹。以下是如何创建以当前日期为名称的文件夹: curl -u 用户名:密码 -X MKCOL "http://example.org/owncloud/remote.php/webdav/$(date '+%d-%b-%Y')" 请参阅文档:https://doc.owncloud.org/server/7.0/user_manual/files/files.html#accessing-files-using-curl - serfer2
@iGbanam 怎样上传 $_files 数组?如果我从表单上传,我无法指定上传文件的路径。 - augustine jenin

9

您需要使用WebDav接口进行通信,地址为:http://yourowncloudserver.com/owncloud/remote.php/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]];

谢谢! :) 这正是我需要的! - tampeta
更好的答案如下所述,正如@Frank Lu所说,如果不将上传的文件作为二进制数据发送,则使用curl的这种方法会使文件损坏。 - Yamaha32088

4

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

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

只需替换<username><password><hostname>,将此命令添加到您的.bash_aliases中,您就可以使用以下命令上传您的文件:

cloud filename
cloud path filename

1
最简单的方法是使用owncloud的webdav接口。

0

上传文件,您需要向文件目标发出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"

0
使用curl for windows和owncloud 8进行编程。我发现唯一传输文件的方法是使用此命令。
curl -u user:password --upload-file "c:\path to file\srcfile" "https://ocserver/owncloud/remote.php/webdav/tgtfile"

希望这能有所帮助


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