REST APIの次のサンプルはファイルアップロードについてです。
見積書アプリなどPCで作成した見積書を自動でkintoneにアップロードしたいといった時に活用できます。
処理は2段階
ファイルアップロードをするためには2段階処理が必要です。具体的には以下の処理になります。
- ファイルをアップロードして、ファイルキーを取得
- データの登録/更新時に取得したファイルキーを指定
kintoneにファイルをアップロード
- kintoneのSDKを利用するためにクラスをimport
- kintoneへ接続
- 添付ファイルをアップロード
- レコードを登録/更新
いつもどおりkintoneAPIのクラスをimportします。
import com.cybozu.kintone.database.Connection; import com.cybozu.kintone.database.Record; import com.cybozu.kintone.database.ResultSet; import com.cybozu.kintone.database.exception.DBException;
これまたいつもと同じでkintoneへ接続するためにサブドメイン、API実行ユーザーログイン名、API実行ユーザーパスワードを渡します。
//kintoneへの接続 Connection db = null; try { db = new Connection("サブドメイン名", "ログイン名", "パスワード"); System.out.println("kintoneへ接続しました"); } catch (Exception e) { System.err.println("kintoneへの接続に失敗しました。" ); e.printStackTrace(); System.exit(1); }
kintoneにアップロードしたい添付ファイルをまず登録します。
登録後に取得されるfilekeyを取得します。
File uploadFile = new File("C:¥test¥test.pdf"); filekey = db.uploadFile(uploadFile);
これでまずはkintoneにファイルのアップロードが完了したので、あとはレコードの登録や更新時に添付ファイルフィールドにfilekeyを渡してあげるだけでOKです。
なお、アップロードしたファイルはレコード登録や更新時に添付をしないと3日間で削除されてしまいます。(filekeyを取得して、直ぐにレコードに添付するとは思いますが。。)
また、ここでアップロードした添付ファイルの容量も契約容量にカウントされますので注意して下さい。
filekeyを指定して、レコードを登録/更新します。(ここでは登録を例にします。)
Record record = new Record(); List<String> files = new ArrayList<String>(); files.add(fileKey); //取得したfilekeyをListにセット record.setFiles("フィールドコード", files); //添付ファイルにファイルキーをセット //kintoneにデータ登録 try { db.insert("アプリID",,record); } catch (DBException e) { System.err.println("kintoneへデータ登録に失敗しました。"); e.printStackTrace(); }
kintoneでは1つの添付ファイルフィールドに複数のファイルを添付できるため、filekeyをListで指定する必要があります。
また、更新時にファイルを追加したい場合は、一度登録済みのfilekeyを取得して、更新時に取得したfilekeyも併せて追加をして更新をしないと登録されていた添付ファイルが消えてしまいますので注意して下さい。
この時、既に登録されているfilekeyはそのファイルを登録した時のfilekeyとは違うキーになりますので必ず、更新のタイミングで登録済ファイルのfilekeyを取得するようにして下さい。
コードをまとめるとこんな感じになります。
import com.cybozu.kintone.database.Connection; import com.cybozu.kintone.database.Record; import com.cybozu.kintone.database.ResultSet; import com.cybozu.kintone.database.exception.DBException; public static void main(String[] args) throws IOException { Connection db = null; try { db = new Connection("サブドメイン名", "ログイン名", "パスワード"); System.out.println("kintoneへ接続しました"); } catch (Exception e) { System.err.println("kintoneへの接続に失敗しました。" ); e.printStackTrace(); System.exit(1); } Record record = new Record(); String fileKey = null; try { File uploadFile = new File("C:¥test¥test.pdf"); fileKey = db.uploadFile(uploadFile); //ファイルをアップロードしてfilekeyを取得 List<String> files = new ArrayList<String>(); files.add(fileKey); //取得したファイルキーをListに追加 record.setFiles("attach", files); //ファイルキーのリストを添付ファイルフィールド(ここではコードはattach)にセット db.insert("アプリID",,record); //レコードを登録 } catch (DBException e) { System.err.println("kintoneからのデータ取得に失敗しました。"); e.printStackTrace(); }finally{ db.close(); //kintone切断 } }
他システムとkintoneとのデータ連携は行いたいけど、開発ができないという方は、カスタマイズ開発を1週間20万円という定額料金で提供していますので、弊社までお気軽にお問い合わせください。