読者です 読者をやめる 読者になる 読者になる

しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

OneDrive に画像をアップロードすると 2048 × 2048 px 以下になる件

Windows ストアアプリ C# Windows ランタイムアプリ

Live SDK を利用すれば以下のように簡単に OneDrive にファイルをアップロードできるんですが・・・

var authClient = new LiveAuthClient();
var login = await authClient.LoginAsync(new List<string>() { "wl.skydrive", "wl.skydrive_update" });

if (LiveConnectSessionStatus.Connected.Equals(login.Status))
{
    this.client = new LiveConnectClient(login.Session);
    
    var operationResult = await this.client.BackgroundUploadAsync(
        "me/skydrive/my_documents",
        file.Name,
        file,
        OverwriteOption.Overwrite);

    dynamic result = operationResult.Result;
}

デフォルトだと画像ファイルの縦幅または横幅が 2048 px を超える場合、次のように縮小されてしまいます;

f:id:matatabi_ux:20140319205627j:plain

そのままのサイズをアップロードしたい!という場合どうすればよいか・・・

探してみたら OneDrive の REST API にやり方が書いてありました

REST リファレンス (Live Connect)

既定では、アップロードされた写真のサイズが 2048 × 2048 ピクセルより大きい場合、OneDrive は、写真がこの 2048 × 2048 ピクセルのサイズ制限内に収まるように自動的に写真を縮小します。この動作を変更するには、downsize_photo_uploads クエリ文字列パラメーターを false に設定します。たとえば、POST の場合は /FOLDER_ID/files?downsize_photo_uploads=false、PUT の場合は /FOLDER_ID/files/FILENAME?downsize_photo_uploads=false と指定します。

Live SDK の場合クエリパラメータなんて引数はありません・・・しかし無理やり次のようにやってみたら

    var operationResult = await this.client.BackgroundUploadAsync(
        "me/skydrive/my_documents?downsize_photo_uploads=false",
        file.Name,
        file,
        OverwriteOption.Overwrite);

f:id:matatabi_ux:20140319210400j:plain

できました・・・ちょっとわかりづらい;