ローカルファイルを選択して、アップロードしたい

元々別管理していた内容と添付ファイルが存在していて、kintoneで管理を行いたいのですが、ファイル量がけっこうな数あるので、一括で登録できる処理を作りたいと思っています。

 

・kintoneの一覧画面でボタンをクリックし、ローカルからファイルを選択

・選択したファイルをアップロードして、ファイル名と一致するキー情報のレコードに関連付けする

という処理を作りたいです。

現在の状態が、

・テストファイルを作ってサーバーにアップロードし、指定したレコードに関連付けされる

・ローカルからファイルを選択し、その内容が表示される

わからないと思っているところは、

・上の組み合わせの書き方がわからない

※選んだファイルをサーバーにアップロードしたい

・ファイルを複数選択したい(フォルダ毎選びたい)

の2点です。知恵をお貸しいただきたく思います。

// テストファイルを作成
const blob = new Blob(['テストファイルです'], {
type: 'text/plain'
});

// FormDataにファイルを格納
const formData = new FormData();
formData.append(' __REQUEST_TOKEN__', kintone.getRequestToken());
formData.append('file', blob, 'test.txt');
const xmlHttp = new XMLHttpRequest();
xmlHttp.open('POST', kintone.api.url('/k/v1/file', true), false);
xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xmlHttp.onload = () => {
if (xmlHttp.status === 200) {
  const key = JSON.parse(xmlHttp.responseText).fileKey;
}
};

xmlHttp.send(formData);
(function() {
"use strict";
//一覧画面を開いた時の処理
kintone.events.on(['app.record.index.show'],function(event) {
  list_show(event);
});

function list_show(event) {
 if (document.getElementById('my_index_button') !== null) {
  return;
 }
// 一覧画面にボタンを作成
 var myIndexButton = document.createElement('button');
 myIndexButton.id = 'my_index_button';
   myIndexButton.innerHTML = '添付ファイル選択';

 // ボタンクリック時の処理
  myIndexButton.onclick = function() {
    const showOpenFileDialog = () => {
      return new Promise((resolve, reject) => {
        const input = document.createElement('input');
        input.type = 'file';
        input.accept = '.txt, text/plain';
        input.onchange = event => { resolve(event.target.files[0]); };
        input.click();
        setTimeout(() => { reject("timeout!"); }, 5000);
      });
      };

    const readAsText = file => {
      return new Promise(resolve => {
        const reader = new FileReader();
        reader.readAsText(file);
        reader.onload = () => { resolve(reader.result); };
      });
      };

    (async () => {
      const file = await showOpenFileDialog();
      const content = await readAsText(file);

      // 内容表示
      alert(content);

// テストファイルのアップロード
      update_list(event);
    })();     
  };
  kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
  }


function update_list(event) {

 //一覧情報の取得
 var record_array = [];
   var records = event.records;

 // 取得レコードループ
 for (var i = 0; i < records.length; i++) {
    var record = records[i];

  // レコードのキーとファイル名を比較(暫定的に、キーの値が1のレコードに更新)
  if(event.records[i].key.value == "1") {
    var record_obj = {
    "id": record['レコード番号']['value'],
    "record": {"file": {"value": [JSON.parse(xmlHttp.responseText)]}}
      };
    record_array.push(record_obj);
  }
 }

 var body = {
  "app": kintone.app.getId(),
  "records": record_array
 };

 kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body,
   function(resp) {

  // success
  alert('更新完了');
 }, function(error) {
  // error
  var errmsg = 'レコード更新時にエラーが発生しました。';
  if (error.message !== undefined) {
   errmsg += '' + error.message;
  }
  alert(errmsg);
 });
}
})();

kintone コマンドラインツール(cli-kintone)
https://developer.cybozu.io/hc/ja/articles/10663181361689
は使えないのでしょうか?

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。