Skydrive api ( http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files ) に従って、投稿要求の本文で画像のコンテンツを byte[] で渡します。ファイルの作成はskydriveサーバーで行われますが、skydriveで開くと、「ファイルが破損しているか破損している可能性があります」と表示されます。
投稿リクエストの本文
--A300x Content-Disposition: フォームデータ; 名前="ファイル"; filename="menu-icon.png" コンテンツ タイプ: アプリケーション/オクテット ストリーム
[B@11f3043
--A300x--
サーバーからの応答。
<html>
<head>
<script type="text/javascript">
window.location = "http://localtesting.com/mywebapp-1.0-SNAPSHOT#state=000000004C0FA618&result=%7b%22id%22%3a%22file.918bb0fbaf82f760.918BB0FBAF82F760!139%22%2c%22name%22%3a%22menu-icon.png%22%2c%22source%22%3a%22https%3a%2f%2f1m61va.tuk.livefilestore.com%2fy2mhncDTiOhUVFZxp08gi3yAFhp7OQ2-UYuQhnC_Obpoo4q5tG6onLuJz2mLJkJh6lUW5l8Cq2KBxvrLRrZ0bk6V7xmfso47cJWAw1fKE8bFJw%2fmenu-icon.png%3fdownload%26psid%3d1%22%7d";
</script>
</head>
</html>
画像をバイト[]に変換するコード
byte[] image=FileUtils.readFileToByteArray(physicalfile);
どんな手掛かり?
編集:以下は私が使用するコードスニペットです
プロパティファイルからいくつかの部分を取得しています。
env.properties
part1=--A300x\u000d\u000aContent-Disposition: form-data; name=\"file\"; filename=\"
part2=\"\u000d\u000aContent-Type: application/octet-stream\u000d\u000a\u000d\u000a
part3=\u000d\u000a--A300x--
java file
String part1=bundle.getString("part1");
String part2= fileName+bundle.getString("part2");
String part3=bundle.getString("part3");
byte[] imageByteArray=FileUtils.readFileToByteArray(physicalfile);
PostMethod postMethod= new PostMethod("https://apis.live.net/v5.0/"+folderPath+"/files?state="+getSkydriveClientId()+"&redirect_uri="+baseURL+"&access_token="+getAcessToken());
postMethod.setRequestHeader("Content-Type","multipart/form-data; boundary=A300x");
postMethod.setRequestBody(part1+part2+imageByteArray+part3);
HttpClient httpClient=new HttpClient();
httpClient.executeMethod(postMethod);