nextcloudにcURLでファイルをアップロード/ダウンロードする方法

nextcloud

約 10 分で読めます。



自分のアプリからnextcloudにファイルをアップロードしたいな!

フォルダー作ったり、ダウンロードもできるのかな?

こんな悩みを解決します。

さっそくやってみる

ファイルをアップロード

以下のコマンドで実行できます。
 curlを使っていますが、ヘッダーなどを揃えれば他でもやれるはず。

# <user> nextcloudでのユーザー名
# <pass> <user>のパスワード
# <nextcloud root> nextcloudのルートフォルダー 例 https://abc.com/nextcloud
# <path to upload> アップロード先ファイルのパス
# <file path to send> アップロードしたいファイルが置いてあるパス
curl -X PUT -u <user>:<pass> https://<nextcloud root>/remote.php/dav/files/<user>/<path to upload> -T <file path to send>



例えば私のnextcloudで、yasuというユーザーのルートフォルダーに、カレントディレクトリにあるimage.jpgをアップロードしたい場合はこうなります。
 パスワードは<pass>のままとします。以降の例でも同様。

curl -X PUT -u yasu:<pass> https://yasufumi-yokoyama.gq/nextcloud/remote.php/dav/files/yasu/image.jpg -T ./image.jpg

ファイルをダウンロード

ダウンロードの場合はこうします。

# <user> nextcloudでのユーザー名
# <pass> <user>のパスワード
# <nextcloud root> nextcloudのルートフォルダー 例 https://abc.com/nextcloud
# <path of file to download> ダウンロードしたいファイルが置いてあるnextcloud上のパス
# <path to save> ダウンロードしたファイルの保存先
curl -X GET -u <user>:<pass> https://<nextcloud root>/remote.php/dav/files/<user>/<path of file to download> --output <path to save>



私のnextcloudで、yasuというユーザーのルートフォルダーにあるNextcloud.pngというファイルをカレントディレクトリにダウンロードしたい場合はこうなります。

curl -X GET -u yasu:<pass> https://yasufumi-yokoyama.gq/nextcloud/remote.php/dav/files/yasu/Nextcloud.png --output Nextcloud.png

フォルダー作成

フォルダーを作る場合はMKCOLというメソッドを使います。

# <user> nextcloudでのユーザー名
# <pass> <user>のパスワード
# <nextcloud root> nextcloudのルートフォルダー 例 https://abc.com/nextcloud
# <folder path to create> 作成したいフォルダーのnextcloud上でのパス
curl -X MKCOL -u <user>:<pass> https://<nextcloud root>/remote.php/dav/files/<user>/<folder path to create>



私のnextcloudで、yasuというユーザーのルートフォルダーにtestというフォルダーを作りたい場合はこうなります。

curl -X MKCOL -u yasu:<pass> https://yasufumi-yokoyama.gq/nextcloud/remote.php/dav/files/yasu/test

フォルダー削除

フォルダーを削除したい場合はこうします。
 上記のMKCOLをDELETEにしただけ。

# <user> nextcloudでのユーザー名
# <pass> <user>のパスワード
# <nextcloud root> nextcloudのルートフォルダー 例 https://abc.com/nextcloud
# <folder path to delete> 削除したいフォルダーのnextcloud上でのパス
curl -X DELETE -u <user>:<pass> https://<nextcloud root>/remote.php/dav/files/<user>/<folder path to delete>



私のnextcloudで、yasuというユーザーのルートフォルダーにあるtestというフォルダーを削除したい場合はこうなります。

curl -X DELETE -u yasu:<pass> https://yasufumi-yokoyama.gq/nextcloud/remote.php/dav/files/yasu/test

その他の操作

その他の実行可能な操作は公式ドキュメントを参照ください。

二要素認証を使っている場合の対処方法

こちらは公式マニュアル(PDF)に説明があります。

リンク先PDFにUsing client applications with two-factor authenticationという項目があります。
そこに以下の通り書かれています。

Once you have enabled 2FA, your clients will no longer be able to connect with just your password unless they also have support for two-factor authentication. To solve this, you should generate device specific passwords for them. See Manage connected browsers and devices for more information on how to do this.

https://docs.nextcloud.com/server/stable/Nextcloud_User_Manual.pdf



簡単に訳すと、

二要素認証を有効にした後はユーザー名とパスワードで認証できないよ。
デバイスごとのパスワードを作ってそれを使ってね。
詳しくはManage connected browsers and devicesを見てね。

とのことです。

実際に特定デバイス向けのパスワードを作ってみましょう。

まずログインして設定に移動。



セキュリティの一番下にあるエディットボックスにアプリ名を入れ、
新しいアプリパスワードを作成をクリックします。


ユーザー名とともにランダム文字列で構成されたパスワードが表示されるので、コピーします。
このパスワードはこの画面から別ページに切り替えると二度と確認することができません。
必ずコピーしておいてください。



あとはこのパスワードを認証パスワードとしてコマンドラインやAPIに組み込めばOKです。

終わりに

いかがでしたか。

私はこの機能を使って、自動水やりシステムにWebカメラをつないで、
 毎日写真を撮ってnextcloudに月別でフォルダー分けしてアップロード
なんてことを考えています!

自動水やりシステムはこちらの記事にありますので、ご興味のある方はどうぞ!

この記事を書いた人

組込ソフト歴15年の外資系エンジニア。
前職で組込Linuxを使った商品設計/品質確保の業務に従事。
Raspberry Piが好き。
株式投資で年50万円を稼ぐ。
妻は香港人(国際結婚)。

Please follow me
nextcloud
Please follow me

Comments

タイトルとURLをコピーしました