Index
ファイルダウンロード
添付ファイルをダウンロードする API です。
※ファイルダウンロード API は、kintone.api() を使った REST API リクエストに対応していません。
HTTP メソッド
GET
URI
https://(サブドメイン名).cybozu.com/k/v1/file.json
ゲストスペースの場合
https://(サブドメイン名).cybozu.com/k/guest/(スペースのID)/v1/file.json
必要なアクセス権
- アプリのレコード閲覧権限
- ダウンロード対象に紐づくレコードの閲覧権限
- ダウンロード対象に紐づくフィールドの閲覧権限
※ ファイルキーを取得するには、レコードの取得(GET)で必要なアクセス権をご参照ください。
リクエストパラメータ
レコードの取得 API で取得したファイルキーを送信することで、ダウンロードするファイルを指定します。
- ファイルのアップロード時にレスポンスで返るファイルキーとは異なるため注意してください。
パラメータ名 | 指定する値 | 必須 | 説明 |
---|---|---|---|
fileKey | 文字列 | 必須 | レコードの取得 API 実行時に、レスポンスデータの添付ファイルフィールドにセットされた値です。 |
リクエストの例
パラメータを HTTP のクエリ文字列で送信する場合
「fileKey」パラメータを、HTTP のクエリ文字列として送信します。
HTTP のクエリ文字列
fileKey=201201e271307126747563577E9431C85B3B26D4AFB1509193
リクエストヘッダを含んだ例
GET /k/v1/file.json?fileKey=201201e271307126747563577E9431C85B3B26D4AFB1509193 HTTP/1.1 Host: example.cybozu.com:443 X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU= Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
- Content-Typeヘッダは不要です。
パラメータを JSON データで送信する場合(HTTP リクエストのリクエストボディに JSON データをセットする場合)
リクエストボディの JSON データ例は以下の通りです。
リクエストヘッダ
GET /k/v1/file.json HTTP/1.1 Host: example.cybozu.com:443 X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU= Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU= Content-Type: application/json Content-Length: 73
- Content-Type に application/json を指定して下さい。 指定しない場合は JSON が解釈できないため、実行時エラーとなります。
ボディ
レスポンス
Content-Type にアップロードされたファイルの MIME タイプが入り、レスポンスボディにファイルの内容がセットされます。
ダウンロードしたいファイルのファイルキー取得方法
レコードの取得 API で目的の添付ファイルフィールドをレスポンスに含めるリクエストを送信すると、以下の例のような形式でレスポンスが返り、ファイルキーを取得することができます。
関連Tips
JavaScriptサンプル
XMLHttpRequest
function downloadEnclosedFile(id) {
var filekey;
query = 'id=' + id;
respForFile = request(app_id, query);
filekey = respForFile.records[id - 1]['pdfdata']['value'][0].fileKey;
console.log("File Key: " + filekey);
//手順1で取得したfileKeyをurlに設定します。
var url = 'https://{domain}.cybozu.com/k/v1/file.json?fileKey=' + filekey;
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'blob';
xhr.onreadystatechange = function(event) {
if ((xhr.readyState == 4) && (xhr.status == 200)) {
//ファイルがレスポンスとして返却されます
console.log("The file retrieved success.");
}
};
xhr.send();
//Blobオブジェクトにファイルを格納
var blob = new Blob([xhr.response], { type: 'application/pdf' });
var url = (window.URL || window.webkitURL);
var blobUrl = url.createObjectURL(blob);
console.log(blobUrl);
var linkFileName = "名刺C.pdf";
if (window.navigator.msSaveBlob) {
console.log("Save blob executed!");
window.open(blobUrl);
window.navigator.msSaveBlob(blob, linkFileName);
} else {
console.log("Else executed!");
window.open(blobUrl);
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var a = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
a.href = blobUrl;
a.download = linkFileName;
a.dispatchEvent(e);
}
}
すみませんが、このソースコードでダウンロードしたPDFファイルが開けないです。
ご指摘いただけませんか?
お世話になります。
複数ファイルの同時ダウンロードは可能でしょうか?
その場合、どのような形でリクエストパラメタを送れば良いのでしょうか?
ご教示いただけると幸いです。
naokwn 様
お世話になっております。
XMLHttpRequestのサンプルソースコードをループに回せば複数ファイルを取得できます。
以下は同じ「添付ファイル」フィールドに添付してる複数ファイルを取得する例です:
kintone.events.on("app.record.detail.show",function(event){
function getfile(filekey){
var url = 'https://ドメイン.cybozu.com/k/v1/file.json?fileKey=' + filekey;
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'blob';
xhr.onload = function() {
if (xhr.status === 200) {
// success
var blob = new Blob([xhr.response]);
var url = window.URL || window.webkitURL;
var blobUrl = url.createObjectURL(blob);
console.log(blobUrl);
} else {
// error
console.log(xhr.responseText);
}
};
xhr.send();
}
var record = event.record;
var fileKeys = record['添付ファイル'].value;
for (var i = 0; i < fileKeys.length; i++) {
var filekey = fileKeys[i].fileKey;
getfile(filekey);
}
});
また、こちらの記事のコメント欄は当記事に関するフィードバック頂く場所とさせていただいております。
その以外のご質問はcybozu developer コミュニティをご活用ください。
お手数おかけいたしますが、よろしくお願い致します。
※ ファイルキーを取得するには、レコードの取得で必要なアクセス権をご参照ください。
リンク切れになっていました。
myaz 様
お世話になっております。cybozu developer network 事務局です。
ご指摘いただきありがとうございます。
「必要なアクセス権」に記載している「レコードの取得」部分のリンク先を正しい URL に修正いたしました。
今後とも cybozu developer network をよろしくお願いいたします。