CSV指定で添付ファイルを一括アップロードするコードをご紹介します.
動作環境
Node.js v12以上で動作します.
用意するファイル
sample.csv
先頭行はフィールド名,文字コードはShift_JIS,区切り文字はカンマ「,」,囲み文字はダブルクォート「"」としてください. 添付ファイルは,main.jsからの相対パスで指定してください. 添付ファイルを複数指定する場合は,カンマ「,」で区切ってください.
・例
"レコード番号","文字列 (1行)","数値","ラジオボタン","添付ファイル"
"2","abc","1","sample1","sample_image1.jpg"
"1","a","1","sample1","sample_image1.jpg,sample_image2.jpg"
※チェックボックス,複数選択,ユーザー選択,組織選択,グループ選択,サブテーブルには非対応です. kintoneのファイル書き出し機能で出力したCSVファイルを利用する場合は,上記フィールドを除外してください.
main.js
9~18行目は適宜変更してください.
(async()=\>{constutil=require('util');constfs=require('fs');consticonv=require('iconv-lite');const{KintoneRestAPIClient}=require('@kintone/rest-api-client');constcsvParse=require('csv-parse/lib/sync');constreadFile=util.promisify(fs.readFile);constclient=newKintoneRestAPIClient({baseUrl:'https://\*\*\*\*.cybozu.com',//kintoneのURLauth:{username:'\*\*\*\*',//kintoneのログイン名password:'\*\*\*\*',//kintoneのパスワード},});constapp= **** ;//アプリIDconstfileName='sample.csv';//CSVファイルのパスconstreverse=true;//データをCSVの逆順に登録するか否かconstformFields=awaitclient.app.getFormFields({app});constdatas=csvParse(iconv.decode(Buffer.from(awaitreadFile(fileName),'binary'),'Shift\_JIS'),{delimiter:',',rowDelimiter:'auto',quote:'"'});constheaders=datas[0].reduce((headers,header,index)=\>{constproperty=Object.values(formFields.properties).find(property=\>property.label===header);if(['RECORD\_NUMBER','\_\_ID\_\_','\_\_REVISION\_\_','CREATOR','MODIFIER','CREATED\_TIME','UPDATED\_TIME','CATEGORY','STATUS','STATUS\_ASSIGNEE',].includes(property.type))returnheaders;headers.push({index,type:property.type,code:property.code});returnheaders;},[]);constfiles=awaitPromise.all(datas.slice(1).map(data=\>headers.filter(header=\>header.type==='FILE').map(header=\>data[header.index].split(','))).flat(2).map(path=\>client.file.uploadFile({file:{path}})));letfileIndex=0;constrecords=datas.slice(1).map(data=\>headers.reduce((record,header)=\>{if(header.type==='FILE'){record[header.code]={value:data[header.index].split(',').map(filePath=\>{returnfiles[fileIndex++]})};}else{record[header.code]={value:data[header.index]};}returnrecord;},{}));if(reverse)records.reverse();awaitclient.record.addAllRecords({app,records});console.log('レコードを追加しました.');})();
必要パッケージのインストール
$ npm i iconv-lite csv-parse @kintone/rest-api-client
実行
$ node main.js