---
title: コンテンツのbulk_upsert APIで画像・ファイル項目の更新はできますか？
description: コンテンツのbulk_upsert APIで画像・ファイル項目の更新は可能です。
category: howto
---

import StructuredDataFaqs from '@site/src/components/StructuredDataFaqs';

<StructuredDataFaqs faqs={[
    { question: "コンテンツのbulk_upsert APIで画像・ファイル項目の更新はできますか？", answer: "コンテンツのbulk_upsert APIで画像・ファイル項目の更新は可能です。" }
]} />

コンテンツのbulk_upsert APIで画像・ファイル項目の更新は可能です。

:::caution
以下の項目のみ更新できます。GCS・S3・Vimeo項目の更新には対応していません。
- 画像（KurocoFilesにアップロード）
- ファイル（KurocoFilesにアップロード）
:::

## zipファイルの用意
bulk_upsert APIでファイル項目を更新するには、zip形式のファイルを用意する必要があります。

任意の名称でフォルダを作成し、その直下に更新対象のファイルを配置してください。ファイル名には任意の半角英数字を設定できます。
```
.
`- assets
    |- File1.png
    |- PdfFile.pdf
    `- Image.png
```

作成したフォルダをzip形式で圧縮します。
```
.
|- assets # 作成したフォルダ
`- assets.zip # assetsフォルダを圧縮したzipファイル
```

## Files::uploadを利用したファイルアップロード
`Files::upload`のAPIを利用して、先ほど作成したZIPファイルをアップロードします。詳しい手順は、[APIを使ったファイルのアップロードについて](/ja/docs/reference/uploading-files-using-the-api/)をご参照ください。

```js
// Files::uploadのレスポンス
{
  "file_id": "files/temp/*.zip",
  "errors": []
}
```

完了したら、以下のようなリクエストボディを`Topics::bulk_upsert`にPOSTします。

`Files::upload`のレスポンスに含まれる`file_id`を`assets_file`に、設定したいファイルの名称を`list`の各項目(ファイルまたは画像項目)に指定してください。


```js
{
    "assets_file": {
        "file_id": "files/temp/*.zip" // Files::uploadのレスポンスに含まれるfile_id
    },
    "list": [
        {
            "topics_id": 1,
            // ...
            "file_field": { "file_nm":  "File.png" } // zipファイル内のファイル名
        },
        {
            "topics_id": 2,
            // ...
            "file_field": { "file_nm":  "PdfFile.pdf" }
        },
        {
            "subject": "New Content",
            // ...
            "file_field": { "file_nm":  "Image.png" }
        }
    ]
}
```

:::caution
- `file_field`の部分はご自身の拡張項目のID(ext_X)かslugに変更してください。
:::

## カスタム処理でのアップロード

カスタム処理からbulk_upsertを呼び出す場合は、`Files::upload`のAPIを利用できないため、ファイル操作系のプラグインを利用してファイルをアップロードします。

以下は、ファイルマネージャの`/files/ltd`ディレクトリに配置した`assets.zip`ファイルをカスタム処理でアップロードする例です。
```smarty
{rcms_hash var='temp_name' data='bulk_upsert_assets' key=$smarty.now|strval}
{assign var='temp_assets_path' value="/files/temp/`$temp_name`.zip"}
{put_file path=$temp_assets_path files_path="/files/ltd/assets.zip"}

{assign_array var='body' values=''}

{* assets_file *}
{assign_array var='body.assets_file'         values=''}
{assign       var='body.assets_file.file_id' value=$temp_assets_path|trim:'/'}

{* list *}
{assign_array var='body.list' values=''}
{assign_array var='content'                    values=''}
{assign       var='content.topics_id'          value=1}
{assign_array var='content.file_field'         values=''}
{assign       var='content.file_field.file_nm' value='File.png'}
{assign var='body.list.' value=$content}

{* POST Topics::bulk_upsert *}
{api_internal var='response' method='POST' endpoint='/rcms-api/1/topics/bulk_upsert' queries=$body member_id=$smarty.session.member_id}
```

:::caution
- `value=1`の部分は更新したいコンテンツIDに置き換えてください。
- `file_field`の部分はご自身の拡張項目のID(ext_X)かslugに変更してください。  
- `File.png`はアップロードしたファイルの名前に変更してください。  
- `/rcms-api/1/topics/bulk_upsert`の部分はご自身のエンドポイントに変更してください。セキュリティが動的アクセストークンに設定されたAPIである必要があります。
:::

:::info
参考: [Smartyプラグイン](/ja/docs/reference/smarty-plugin/)  
参考: [カスタム処理からKurocoのAPIを呼び出せますか？](/ja/docs/faq/how-to-request-kuroco-api-from-smarty-function/)  
:::

## 関連ドキュメント
- [APIを使ったファイルのアップロードについて](/ja/docs/reference/uploading-files-using-the-api/)
- [bulk_upsert APIを利用して、任意のCSVファイルをコンテンツにインポートする](/ja/docs/tutorials/bulk-upload-using-api/)
