[OneDrive API] ネット上のファイルを OneDrive に保存

2015/03/15Development, Web ServiceOneDrive

2015/2 に公開された新しい OneDrive API では、ファイルのアップロード方法が追加され、指定した URL のファイルを OneDrive にアップロード(保存)できます。※ 3/14 時点では Preview 機能です。

これまでのようにファイルのバイトデータを HTTP PUT する必要がなく、簡単に OneDrive にファイルを保存できます。Web アプリでは活用できそうな機能ですね。

さっそく、JavaScript サンプル を元に、コードを書いてみました。

認証後に実行される onAuthenticated 部分を書き換えています。

<script>
// (省略)
function onAuthenticated(token, authWindow) {
if (token) {
if (authWindow) {
removeLoginButton();
authWindow.close();
}
(function ($) {
// Upload an item to OneDrive from a URL
$.ajax({
url: 'https://api.onedrive.com/v1.0/drive/special/photos/children?access_token=' + token,
type: 'POST',
headers: {
'Prefer': 'respond-async',
'Content-Type': 'application/json'
},
dataType: 'json',
data: '{' +
'"@content.sourceUrl": "http://pronama.azurewebsites.net/wp-content/uploads/2015/02/20150206.jpg",' +
'"name": "20150206.jpg",' +
'"file": { }' +
'}',
}).done(function () {
// MEMO: unreachable (2015/3/14)
console.log("success");
}).fail(function (xhr, textStatus, errorThrown) {
console.log(xhr);
});
})(jQuery);
}
else {
alert("Error signing in");
}
}
// start the whole thing off by calling odauth() in non-click mode.
// if the user isn't logged in already, a sign-in link will appear
// for them to click.
odauth();
</script>

view raw
index.html
hosted with ❤ by GitHub

コードでは、アップロード先は、Photos フォルダー (/drive/special/photos/) とし、URL と保存ファイル名は、直接記述しています。

API 詳細は、Upload an item to OneDrive from a URL (Preview) 参照。HTTP リクエストは POST メソッドで、Prefer Header の値に respond-async を指定する必要があります。

不具合と思われる現象

  • アップロード成功時も done() が実行されない。レスポンスの JSON がパースできず fail() が実行されるようです。
  • アップロードしたファイルを削除すると、同名のファイルをアップロードできない(HTTP レスポンスは 202 だが、ファイルがフォルダーに作成されていない)。同じコードで繰り返し動作確認しようとしたらできませんでした。