CabinetAddFile APIを使用してアップロードしたファイルが壊れている

いつもお世話になっております。 HORI と申します。
Garoon API(ファイル管理)についてお聞きしたいことがあります。

【質問】
「CabinetAddFile」APIを使用して、Windows Form Applicationから、指定のフォルダへのファイル追加アプリケーションを作成しました。

アップロード自体は正常に完了しますが、Garoonからファイルをダウンロードしてみますと壊れていました。
SOAPレスポンスを確認すると、どの様なファイル(PDF/doc/xls)をアップロードしても全て、「<size>24</size>」が返されていました。
Base64の変換ミスを疑ってみましたが、同様に作成した掲示板への添付ファイル追加アプリケーション(BulletinModifyTopicsを使用)では、正常にアップロード/ダウンロードが行われております。
尚、掲示板更新(BulletinModifyTopicsを使用)の場合は、SOAPレスポンスの<size>タグはファイル管理とは異なり、正常と思われるファイルサイズが返されていました。

原因/対応等、ご存じの方がおみえでしたら、ご教示頂けます様お願い致します。

こちらでもCabinetAddFileを使用してファイルをアップロードしてみましたが、
正常にアップロードが行えました。
また、ダウンロードしたデータも破損していませんでした。

ファイル追加アプリケーションがガルーンに送信しているXMLデータを調べ、
Base64の結果が正しく含まれていることを確認してみてはいかがでしょうか?
※送信しているデータはFiddlerなどでキャプチャできます。


こちらでの確認結果

概要

cybozu.com Development team」のアイコン画像をアップロードしました。
アイコン画像はユーザー/アドレス帳を操作するのページから取得したです。

なお、同ページからダウンロードできるAPI_sample_program_ja1.pdfも
正しくアップロードできることを確認しています。

アップロードにはcygwinを使っています。

準備

以下の内容の1.xmlと2.xmlを作成します。
Username,Password,hidは実行する環境に応じて変更します。

$ cat 1.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
  <SOAP-ENV:Header>
    <Action>CabinetAddFile</Action>
    <Security>
        <UsernameToken>
            <Username>sato</Username>
            <Password>sato</Password>
        </UsernameToken>
    </Security>
    <Timestamp>
        <Created>2037-08-12T14:45:00Z</Created>
        <Expires>2037-08-12T14:45:00Z</Expires>
    </Timestamp>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <CabinetAddFile>
      <parameters hid="1" name="defaultC48.png">
        <content xmlns="">

$ cat 2.xml
        </content>
      </parameters>
    </CabinetAddFile>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

送信データの生成

$ cat 1.xml > CabinetAddFile.xml
$ base64 defaultC48.png >> CabinetAddFile.xml
$ cat 2.xml >> CabinetAddFile.xml

最終的に生成されるCabinetAddFile.xmlの中身は以下のようになっています。

$ cat CabinetAddFile.xml
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
  <SOAP-ENV:Header>
    <Action>CabinetAddFile</Action>
    <Security>
        <UsernameToken>
            <Username>sato</Username>
            <Password>sato</Password>
        </UsernameToken>
    </Security>
    <Timestamp>
        <Created>2037-08-12T14:45:00Z</Created>
        <Expires>2037-08-12T14:45:00Z</Expires>
    </Timestamp>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <CabinetAddFile>
      <parameters hid="1" name="defaultC48.png">
        <content xmlns="">
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
WXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAwAAAAMADO7oxXAAAERUlEQVRo3uWaT2gjVRzHPwnd
bMkmzayJXdpDO9alVtlDtAibXZXsRfBkquyh7oItexa2F6/pQo9CuxcPirQLhR5kaRe8uAd3wH+X
bXdEwRpLnQasJjZlatli07TxMPkzmUzSyb9Jq194JPN7b/K+n3m/N+/NEEc2m+U0qwNgYWEhCCwC
YrsNWZQCjIyOjsoducBiX1+fODAw0G5jlrS+vi7G4/FF4Lk8gNjl87GVStlmQp2/zkFylTPdQwg3
P68p1uXzQS5b8gDs7+/behUPkquFz3zfVmN6FQCOjo5sBXAGBjnaimmfub6txkwB7Jb7+nzdMVOA
zs5OAKTPJuja/qZdXFX19zOvEb41XR1g4B+Jq5fabdVc365LBZ9lAE6nEwDP2UPOu9tt1Vyes0Wf
ZQAOhyP3JVdOohw6n0YAfaOTDGBUh9WGJ1UFgOxRtmi+RoDdfVBSkM4UY6If/Oea7Nah81kGkK0P
YDkOsT0RcTiCyy0U4tLyEsRkwi9ox5sqpA+h1wc9vgYAsk0EkGLgvTrJ6Ei0rG74nSipDRnp03EA
eofCuM4JLP8ssftYIjSgjVLzAfIQxyiWgN63Zxl8faxiG39/kHennpQGR6Lsbil8Pz8B20s1QxgB
nPqKbDZbHAFD2d2HWFJLGWUbdvvHqpqvJm9A5M3biyjeCOlDKvZpVgo+y0YA8xRKZ0D6BVIOkZ6h
MN5nRWIbMqG3ojSqK+OzKB9LDJ5XrZ3g0Pk0AhTiOoB0Bh6uCVy6OYv4SqRhw0a53AKpnjE+eTij
HXdAwAP9fhAD4O00nODQ+TQClJDlAH7cEgh98Ah/X7Dp5vMK3ZgmdEPboKX3VFJxGWXlAV+sLDHo
URjuL21vHAGnrkYrunzzXo621LxRLrdAz1CY0HvTjH70GwQnub9M6TzJ+ywDyCvX8I8dEC+P2Wbe
TMORKOEPn5A6ECre3iuuAz0vhkG3MLVSaVXBtXEPEhL8KRUrPCL+C2F4PqjFq60DJbJ5L/Td/Ttc
cc7h6jD0/VSB9bmqniqmkJ0Q4VuzbO4J1tYCywCqbB8B4H8p0mSAAxWSkm0A3oDYGEDJEp1vvDIB
adUegqeKJfPGrUT1OaDK8NU1e9Lp96Ump1C+7Mjw5ctaaZViM5BR6wKw/ky8I7fOvDxh7a7X8DOx
KoMQbMywKsPmAy3n/5KKuV+nansr8etdeHW2MYAfJjTjx10sM9U1B/QlPtfYhH48DltSTQ8wzZsD
eX19Dd54BL5g5TY7sgZ6ToQzgpYma3eL5utVU94LZVQN4uJt6Hsf3GKxbk+B+D1Ym9EWwlp+t07V
92Yuo8LqpFYAAmHt6rbYbHNSyEwpyZ7NX8sA7NJ/+t1oifmTCvC/SCHVE0H6aandVk2leiIEjgO4
GJ4Cptrt1VQBk5gTwOVykUwm2u3PsnJeFciNQHf3hTvJZCKaSJwaCAUYAXCc9r/b/AtB1Z22PE0B
9gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNC0wMS0yNFQwMDo1MzoxNiswMDowMMQtsjIAAAAldEVY
dGRhdGU6bW9kaWZ5ADIwMTQtMDEtMjRUMDA6NTM6MTYrMDA6MDC1cAqOAAAAGXRFWHRTb2Z0d2Fy
ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==
        </content>
      </parameters>
    </CabinetAddFile>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

アップロード操作

curlによりXMLデータをPOSTします。

$ curl -S https://(domain).cybozu.com/g/cbpapi/cabinet/api -X POST -d @CabinetAddFile.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cabinet="http://wsdl.cybozu.co.jp/cabinet/2008">
 <soap:Header><vendor>Cybozu</vendor><product>Garoon</product><product_type>2</product_type><version>4.2.0</version><apiversion>1.6.0</apiversion></soap:Header>
 <soap:Body><cabinet:CabinetAddFileResponse>
 <returns xmlns="">
 <file id="18" folder_id="1">
 <title>defaultC48.png</title>
 <max_version>0</max_version>
 <name>defaultC48.png</name>
 <size>1345</size>
 <mime_type>image/png</mime_type>
 <creator_id>2</creator_id>
 <creator_login_name>sato</creator_login_name>
 <creator_display_name>sato</creator_display_name>
 <create_time>1443126501</create_time>
 <description/>
 </file>
 </returns>
</cabinet:CabinetAddFileResponse>
 </soap:Body>
</soap:Envelope>

いつもお世話になっております。 HORI と申します。

「Kawamukai Naoki」さま、ご回答頂きましてありがとうございました。
※お礼が遅くなりまして、申し訳ございませんでした。

ご提示頂きました、方法で正常にUPLOAD/DOWNLOADが行えることを確認致しました。

私のコードと、Kawamukai Naoki様のコードの差異としては、「UtilGetRequestToken」を使用しているか否かにありました。

Kawamukai Naoki様のコードでは、コマンド発行時に「UID/pass」を送信XMLに含められていますが、私のコードでは、最初に「UtilGetRequestToken」を使用してリクエスト・トークンを取得して、その後は送信XMLに「UID/PASS」の代わりにリクエスト・トークンを使用していました。

今回、Kawamukai Naoki様のコードと同様に、コマンド発行時に「UID/pass」を送信XMLに含めることで、正常にUPLOAD/DOWNLOADが行えることを確認致しました。

お忙しいところ、お時間を頂きまして、ありがとうございました。