Uploading files to an ownCloud server programmatically
Solution 1
@Javier Gonzalez, To upload a file...
Bad option:
curl -X PUT "http://yourserver.com/owncloud/remote.php/webdav/file.zip" -F myfile=@"/Users/Javi/Downloads/file.zip"
For, the uploaded file will contain the http headers.
Better option:
curl -X PUT "http://yourserver.com/owncloud/remote.php/webdav/file.zip" --data-binary @"/Users/Javi/Downloads/file.zip"
Or just use curl -T filename url to upload
Solution 2
You have to communicate with the WebDav interface at http://yourowncloudserver.com/owncloud/remote.php/webdav/
To upload a file you have to make a PUT request to the destiny of the file for example: http://yourowncloudserver.com/owncloud/remote.php/webdav/file.zip
And add the input stream to the request to read the file.
Here is the CURL command:
curl -X PUT -u username:password "http://yourserver.com/owncloud/remote.php/webdav/file.zip" -F myfile=@"/Users/Javi/Downloads/file.zip"
You also can check our code on Objective C to check the parameters that we use: 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]];
Solution 3
As an addition to the existing answers, I use the following function as alias:
cloud() {
curl -X PUT -u "<username>:<password>" "https://<hostname>/remote.php/webdav/${2:-$1}" --data-binary @"./$1"
}
Just replace <username>
, <password>
and <hostname>
and put this in your .bash_aliases and you can upload your files with:
cloud filename
cloud path filename
Solution 4
The easiest way would be to use the webdav interface of owncloud
tampeta
Updated on June 14, 2022Comments
-
tampeta almost 2 years
I am trying to set a web application where many clients can connect through a Node.js http server and then upload/download files that will then be shown in different displays. I am thinking about having those files stored in a free cloud service that can be integrated to my app. Oh, and I am also using socket.IO in this project.
Dropbox offers some API to do this: https://www.dropbox.com/developers but I was looking into a free solution like ownCloud where I can have a larger amount of storage and also have my own private server.
Does anyone know if this can be done? or can offer any tips about alternative solutions to my problem? I would really appreciate any help with this since I am quite new to all this.
-
tampeta almost 10 yearsThank youu! :) this is what I needed!
-
Yamaha32088 almost 9 yearsThe better answer is listed below, as stated by @Frank Lu the uploaded file will be corrupt using this method of curl if it is not sent as binary data.
-
Tomas Sykora over 8 yearsHI, thanks do you have any idea how to create folder using API?
-
Marcel Böttcher over 8 yearsbe sure to use a valid target url without whitespaces etc. or escape them. CURL is not doing it for you.
-
serfer2 over 8 years@TomasSykora you can create folders in ownclod by using curl and webdav. This is how to create a folder with current date as name: curl -u user:pass -X MKCOL "example.org/owncloud/remote.php/webdav/$(date '+%d-%b-%Y')" see docs: doc.owncloud.org/server/7.0/user_manual/files/…
-
augustine jenin over 4 years@iGbanam How to upload $_files array ? if i upload from a form , i can not specify the path of uploading file.