実は16日に書いていたのですが、途中で忙しくなり消してしまったので、また1から書き直しです。
先日の最後にフォルダの作成方法について書きました。
また、フォルダをたどっていくときの注意点についても書きました。
あと、何が必要でしょうか??
ファイルの送信ですね?
ファイルの送信は、色々なところに紹介されているようなMIME形式でMethod POSTを利用するのが最も楽です。
先日までの手段を用いて、フォルダのupload_locationを取得したら、それに対して、methodをPOSTに設定して
UploadFileで送信するだけで終わりです。
始め、ご丁寧にMIMEのmulti-partを作成してUploadDataを使って送信しようとしたんですが、"Content-Type"でエラーが出て送信が出来なかったんですよ。
ですので、送信先と、送信元で違うファイル名を設定することが出来ません。
ファイルに対する情報設定は事前にやっておく必要があります。
実際の送信方法はこちら
Byte[] bData = wc.UploadFile(UploadLocation + "?access_token=" + access_token, "POST", FullName);
また、APIその物に
http://msdn.microsoft.com/en-us/library/dn631834.aspx
ここを見ていただければ分かりますが、
name、description、sort_by以外に書き込める内容が存在しません。
プロパティの変更は、ほぼ何も出来ないと思って間違い有りません。
まぁ、descriptionにコード化したupdatetimeなどの情報を忍ばせても良いですが、
そこまでするのかな?って感じはしなくもありません。
ローカルの送信元のファイルがクラウド側の送信先のファイル日付より新しくなっていたら、更新するという非常にシンプルな構造でも、自動更新は可能です。
取りあえず、実行完了時に帰ってくるByte[]にフォルダ作成時と同じように新しいファイルのid等が入ったJSONが有りますので、それを利用すれば、デスクリプション等の変更やファイルのダウンロードが可能です。
これで、一応目的の、OneDriveの指定場所に、指定したフォルダの内容を自動的にアップロード/更新が出来る状態になりました。
ですが、まだちょっと問題が有ります。
そう、消したファイルです。
消したディレクトリを、まるまるクラウド側で消すのは、色々と問題が有ります。
なので、ディレクトリ削除については今回は行いませんが、
1個1個のファイルなら別です。
ファイルを削除する場合はこちら
ちなみに、UploadDataを利用していますが・・・送信データはありません。
wc.UploadData("https://apis.live.net/v5.0/" + id + "?access_token=" + access_token, "DELETE", new Byte[0]);
また、削除するので、返信もありません。多分、JSONが帰ってきたら、ファイルの削除に失敗しているとかそういう感じでしょうか?
イマイチ分かりません。
それにしてもMethod Deleteが日の目を見るとは思いませんでした。
httpの仕様にはかなり以前からDleteは存在したのですが、誰かが、Deleteを送信しただけでファイルが削除されてしまってはWWWなんか存在出来たものではありません。
ですが、OAuthが出来て、セキュリティの高い認証・クラウドでのファイルの授受が頻繁に行われるようになった現在になって、漸く利用出来るようになったと言うことでしょうか?
では、次回からは上級編です。
アクセストークンの更新の仕方などを調べておきます。
(1時間?程度で有効期限が切れます。)
|