ローカルCSVにあるPDFファイル含むすべてのデータをkintoneアプリにアップロードしたい

何を実現したいのかを書きましょう

ローカルにあるCSVファイルに添付ファイル(pdf/docx)があり、添付ファイル以外うまくアップロードできましたが添付ファイルができません、添付ファイルをアップロードできるよい方法があればご教授をよろしくお願い致します

以下のコードは以下のエラーでできませんでした。{“code”:“CB_OA01”,“id”:“zm13JV508UTNMWO8pWPD”,“message”:“Cannot access protected resource.”}

#!/bin/bash
set -e

appId=1
apiToken='xxxxxxxxxx'
domain='https://example.cybozu.com/'
csvFilePath='./project1.csv'

# CSVファイルの読み取りとレコードの処理
while IFS=$'\t' read -r PROJECT_ID ATTACHED_FILE; do
  echo "Processing PROJECT_ID: $PROJECT_ID, ATTACHED_FILE: $ATTACHED_FILE"

  # プロジェクトIDが空の場合はスキップ
  if [ -z "$PROJECT_ID" ]; then
    echo "Skipping due to empty PROJECT_ID."
    continue
  fi

  # ファイルキーの取得
  echo "Uploading file: $ATTACHED_FILE"
  fileKey=$(curl -X POST "${domain}/k/v1/file.json" \
    -H "Authorization: Bearer ${apiToken}" \
    -F "file=@${ATTACHED_FILE}" | jq -r '.fileKey')

  echo "File uploaded successfully. File Key: $fileKey"

  # レコードの更新
  curl -X PUT "${domain}/k/v1/record.json" \
    -H "Authorization: Bearer ${apiToken}" \
    -H "Content-Type: application/json; charset=Shift-JIS" \
    -d '{
      "app": '$appId',
      "id": "'$PROJECT_ID'",
      "record": {
        "ATTACHED_FILE": [
          {
            "fileKey": "'$fileKey'"
          }
        ]
      }
    }'

  echo "Attachment uploaded for PROJECT_ID: $PROJECT_ID"
done < <(tail -n +2 "$csvFilePath")

@PL.2023 さん

こんにちは、一点気になったので回答させていただきました。
まず、エラーですが直訳すると「保護されたリソースにアクセスできません」だと思いますが、
そちらを踏まえて、ファイルのアップロード及びfilekeyを取得される部分にヘッダー情報でのapiTokenの指定方法が違うと思いました。
恐らくですが、下記のような形になるかと思われます。

  fileKey=$(curl -X POST "${domain}/k/v1/file.json" \
    -H "X-Cybozu-API-Token: ${apiToken}" \
    -F "file=@${ATTACHED_FILE}" | jq -r ".fileKey")

@y_minamitani9534
こんにちは、ご連絡ありがとうございます。
はい、おっしゃる通りですがご指摘コードで試してみましたが全く同じエラーがでました。

ちなみにですが、filekeyは取得できているのでしょうか?
また、jqコマンドを抜かれた状態でも試されましたでしょうか?

「いいね!」 1

@y_minamitani9534
返信遅くなり申し訳ありません。
filekeyは正しく取得でいています。
jqコマンドを抜かれた状態では試していませんでした。

filekeyが正しい値で取得できているのであれば、恐らくjqコマンドは関係ないかなと思いますね…
眺めていて一点気になったところがございました。
ここですが、

{"record": {
        "ATTACHED_FILE": [
          {
            "fileKey": "'$fileKey'"
          }
        ]
    }
}

恐らく、こうじゃないかなと思われます↓

{"record": {
        "ATTACHED_FILE": {
            "value":[
              {
                "fileKey": "'$fileKey'",
              },
            ]
          }
      }
  }

エラーメッセージから考えたら少し違うような気もしますが、一度試していただければと…

@y_minamitani9534
ありがとうございます。
同じエラー出ました。

参考情報です。
エラーコード CB_OA01 で検索すると以下のページが見つかりました。
Google Apps ScriptでKintoneのユーザ一覧を取得する【GAS】 :palm_tree: officeの杜 :coconut:

403エラー「CB_OA01 : cannot access protected resource」で全てエラーになります

認証がらみの何かでしょうかね?

ただ、添付ファイル以外はアップロードできているという内容なので矛盾している気もしますが、質問文で貼り付けたヘッダーの内容では動かない内容だったのでなんとも言えない印象です。

「いいね!」 1

@aaa
こんにちは、
情報共有ありがとうございました。
参考にさせて頂きます。
認証がらみのところですがあまり添付ファイルアップロードするさいには特に必要なさそうでした。とりあえず認証はスキップしました。

「いいね!」 1

@t.nori
こんにちは。
情報共有ありがとうございました。参考にさせて頂きます。
共有させて頂いたコードはnode.jsですがkintoneのjavascript/cssカスタマイズには使用できないと思いますがkintoneのカスタマイズにnode.jsをどのように活用しますでしょうか?

すみません。意味がわかりませんでした。

最後に試されたコードを提示してもらってもいいですか?
ちなみにfilekeyが正常取得とはどうやって確認しましたか?
ちなみに認証できなければファイルのアップロードはできませんし、仮にアップロードできているのであれば対象の添付ファイルフィールドに対して取得したfilekeyを使って更新すれば添付ファイルフィールドにセットされるはずです。

ありがとうございます。理解しました。

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