# 9.2.0のrest apiによるファイルのアップロードについて

**URL:** https://forums.concretecms.org/t/9-2-0-rest-api/5888
**Category:** 開発
**Created:** [July 13, 2023, 4:34am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888 "2023-07-13T04:34:30Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [July 13, 2023, 4:34am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/1 "2023-07-13T04:34:30Z")

</div>

9.2.0を使用しています。  
REST APIを用いて、PythonアプリからConcreteCMSへファイルをアップロードしたいのですが、下記コードにて、\<Response [400]\>のエラーが返されてしまいます。

tokenは、下記コードを実行する前に、Scopeを files:addでpassword Credentialを用いて取得しています。

どの様に記述すればよいか教えて頂けないでしょうか。

import requests  
import pathlib

token\_file\_path = pathlib.Path(“./token\_for\_uploading.txt”)  
with open(token\_file\_path) as f:  
token = f.read()

get\_url = “http://\*\*\*\*\*\*\*\*.com/concrete5/ccm/api/1.0/files”  
head = {‘Content-Type’: ‘multipart/form-data’,‘Authorization’: ‘Bearer {}’.format(token)}

pdf\_file = open(‘./API\_TEST1.pdf’,‘rb’).read()  
folder = 6829  
folder\_data = {‘folder’: folder}  
upfile = {‘file’: (‘API\_TEST1.pdf’, pdf\_file, ‘application/pdf’)}

upload\_result = requests.post(get\_url,headers=head,data=folder\_data,files=upfile)  
print(upload\_result)

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [July 21, 2023, 12:27pm UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/2 "2023-07-21T12:27:18Z")

</div>

@TatsumaK 投稿ありがとうございます！

すいません。file をアップロードするエンドポイントは使ったことがなかったので、  
僕の方でも試してみました。

エラーが出ているのですが、これは僕の環境に依存しているのか否かがわからないのでもうちょっと調べます。

* * *

そもそもなんですが、Concrete CMS には Rest API を試すことのできるツール SWAGGER と呼ばれる、ブラウザ上で API エンドポイントをデバッグできるというツールがあります。

Concrete CMS の管理画面から REST API ページに行き、API Integration を作成します。  
Integration の詳細ページの下に `View API Documentation Console` というボタンがあります。

 ![image](https://forums.concretecms.org/uploads/default/original/2X/2/2fd13843bb59dcb8ef108dc0327a77ba23f693d5.png)

ボタンをクリックすると、ブラウザ上から API エンドポイントをテストできる環境ができるのですが、ご存じですか？

そこでテストをしてみたんですが、500 エラーになってしまいました。(400 エラーではないですね)

なぜ 500 エラーが発生したのか、ちょっと GitHub で PortlandLadb とも確認します。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [July 21, 2023, 9:21pm UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/3 "2023-07-21T21:21:48Z")

</div>

ご返信ありがとうございます。

＞ボタンをクリックすると、ブラウザ上から API エンドポイントをテストできる環境ができるのです  
＞が、ご存じですか？

知りませんでした。今すぐに試せないので、月曜に試してみます。  
500エラーは、  
upfile = {‘folder’: folder,‘file’: (‘API\_TEST1.pdf’, pdf\_file, ‘application/pdf’)}  
upload\_result = requests.post(get\_url,headers=head,files=upfile)  
の様に記述した時に、私の方でも発生したと思います。  
すみませんが、引き続きよろしくお願いします。

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [August 3, 2023, 7:42am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/4 "2023-08-03T07:42:31Z")

</div>

@TatsumaK

僕の方でも試してみたんですが、ちょっとエラーが出るかもです。  
そちらでも試していただけると助かります。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [August 3, 2023, 10:42pm UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/5 "2023-08-03T22:42:54Z")

</div>

私の方でも、Concrete CMSのAPIテスト環境で試してみましたが、Authorizeが上手くいかないですね。  
client\_idとclient\_secretを正しく入力しても、エラーが発生します。

GETのAPIを実行しても４０４エラーが発生します。  
（私の環境では、/var/www/concrete5 をconcrete cmsのホームディレクトリにしているので、そこが関係しているかもしれません）

Pythonからは、GETでファイルのメタを取得したり、Deleteでファイルを削除するのはうまくいきます。PUTでファイルのアップロードが失敗します。（恐らく、pythonコードの記述に問題があると思われます）。もう少し調べてみます。

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [August 4, 2023, 2:40am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/6 "2023-08-04T02:40:29Z")

</div>

@TatsumaK どのようなエラーになるか教えてもらうことは可能でしょうか？

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [August 4, 2023, 4:28am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/7 "2023-08-04T04:28:25Z")

</div>

@katz515  
下図のエラーが発生しますが、どうやらこれは、concete cmsのホームディレクトリを/var/www/concrete5に設定していることに起因しているようです。_**.comの後ろに/concrete5を入れると、正常なレスポンスが得られました。  
ただ、concrete cmsのAPIテストページは**.com/concrete5になっています。これがAuthorizeのテストページでは正しく反映されないようです。  
図１．エラーの状況  
  ![キャプチャ1](https://forums.concretecms.org/uploads/default/original/2X/f/f15767d36ae73a4bd065cd83e0caa7f980bb5275.png)  
図２．_\*\*\*.com/concrete5を入力すると正常なレスポンスが得られる

 ![キャプチャ2](https://forums.concretecms.org/uploads/default/original/2X/d/d201c30b19ae8b6a30ddd5167f17137735912d3d.png)  
図3.APIテストページは \*\*\*\*.com/concrete5となっている  
 ![キャプチャ3](https://forums.concretecms.org/uploads/default/original/2X/6/69e5ec67cf6ae0545dc3f0a0c716fcf56ff9780f.png)

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [August 4, 2023, 6:46am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/8 "2023-08-04T06:46:22Z")

</div>

@TatsumaK あー、ありがとうございます。

Concrete CMS は、時々、サブディレクトリにインストールされていることを考慮していない時がありまして・・・今回もそれが原因ですね・・・。

GitHub にバグ報告します。ありがとうございます。

僕はこの次でファイルアップロードでエラーがでたので、TasumaK さんも同じエラーがでるか、確認していただけると助かります。

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [August 4, 2023, 6:54am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/9 "2023-08-04T06:54:32Z")

</div>

サブディレクトリにインストールされた時に404 になってしまう件、  
GitHub にバグ報告いたしました。

> <https://github.com/concretecms/concretecms/issues/11579>
>
> \### Affected Version of Concrete CMS
> 
> 9.x
> 
> \### Description
> 
> I'm just passi…ng the bug report from a Japanese user, \[TatsumaK\](https://forums.concretecms.org/u/TatsumaK)
> https://forums.concretecms.org/t/9-2-0-rest-api/5888/7
> 
> REST APi auth page of the Concrete doesn't output DIR\_REL (the directory path if Concrete is installed in the subdirectory)
> 
> \### How to reproduce
> 
> \- Install Concrete in the directory like \`/concrete\`
> \- Create a new Rest API endpoint and create authorization 
> \- The URL endpoint doesn't output \`/concrete\` path, which should be included, resulted with 404 error
> 
> \### Possible Solution
> 
> Add DIR\_REL
> 
> \### Additional Context
> 
> \_No response\_

ありがとうございます。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [August 7, 2023, 12:04am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/10 "2023-08-07T00:04:36Z")

</div>

@katz515 こんにちは  
ファイルのアップロードも試してみましたが、同じエラーが発生します。  
サブディレクトリが考慮されていません。

curl -X ‘POST’   
‘http:/\*\*\*\*\*\*\*\*\*.com/ccm/api/1.0/files’   
-H ‘accept: application/json’   
-H ‘Content-Type: multipart/form-data’   
-F ‘folder=1000’   
-F ‘file=@test-file-j.pdf;type=application/pdf’

404 Not Found
# Not Found

The requested URL was not found on this server.

追加で質問ですが、folder No.はどの様にして設定（取得）すればよいのでしょうか？  
手動でフォルダーを作成し、なんらかの方法でそのfolder No.を取得すればよいのでしょうか？  
それとも、適当なfolder No.を設定しておくと、そのfolderを自動的に作成してくれるのでしょうか？  
よろしくお願いいたします。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [January 22, 2024, 6:37am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/11 "2024-01-22T06:37:18Z")

</div>

> [@TatsumaK](#):
>
> @katz515

@katz515 こんにちは。  
こちらの件、半年ほど放置していましたが、再開させてください。

APIを用いたファイルのアップロードを試みております。  
pythonにて

```
    data = open(file_path, 'rb')
    files = {'file': data}
        
    head = {'Authorization': 'Bearer {}'.format(token)}
    
    res = requests.post(update_url,headers=head, files=files)

```

上記のようにconcrete cmsへ、ファイルのアップロードを試みておりますが、500エラーが発生します。  
バイナリをそのままアップロードすると、500エラーが発生します。  
concrete cmsは、バイナリファイルをそのままアップロード出来ない仕様でしょうか？

ちなみに、下記コードでは400エラーとなります

```
    with open(file_path, 'rb') as file:
        files = {'file': (file.name, file, 'application/pdf')}
    head = {'Authorization': 'Bearer {}'.format(token)}
    res = requests.post(self.update_url,headers=head, data=files)

```

もし何かわかれば、よろしくお願いいたします。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [January 23, 2024, 4:45am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/12 "2024-01-23T04:45:47Z")

</div>

@katz515  
すみませんが、追加で教えてください。

Adds a file objectのエンドポイントの説明に、  
folder:integer  
とありますが、Concrete cms上で作成したフォルダーのNo.を確認する方法が分かりません。  
また、folderを作成したり、folderのNo.を取得するエンドポイントが見つかりません。

folderのNo.を取得する方法を教えて頂けないでしょうか。  
若しくはこの、folder:integerは他の意味があるのでしょうか？

すみませんが、よろしくお願いいたします。

---

<div class="post-metadata">

### Author: ![katz515](https://forums.concretecms.org/user_avatar/forums.concretecms.org/katz515/32/4325_2.png) [@katz515](https://forums.concretecms.org/u/katz515)
#### Post date: [January 23, 2024, 7:39am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/13 "2024-01-23T07:39:18Z")

</div>

@TatsumaK ありがとうございます。  
ちょっと、僕も心当たりがないので、英語で、トピック立てて聞いてみました

> [@How can we check the folder ID](https://forums.concretecms.org/t/how-can-we-check-the-folder-id/6833):
>
> This is the translation of the following post [https://forums.concretecms.org/t/9-2-0-rest-api/5888/12](https://forums.concretecms.org/t/9-2-0-rest-api/5888/12)@TatsumaK is trying to make a use of RestAPI. He wants to know the following What does “integer” of “folder:integer” mean at Adds a file object documentation He wants to know how he can check the folder ID He wants to know is there any RestAPI endpoint to create folder Thanks

こっちの返信を待ちましょう。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [January 24, 2024, 4:37am UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/15 "2024-01-24T04:37:22Z")

</div>

@katz515  
ありがとうございます。  
返信がないか、チェックします。

---

<div class="post-metadata">

### Author: ![TatsumaK](https://forums.concretecms.org/user_avatar/forums.concretecms.org/tatsumak/32/3495_2.png) [@TatsumaK](https://forums.concretecms.org/u/TatsumaK)
#### Post date: [January 29, 2024, 11:00pm UTC](https://forums.concretecms.org/t/9-2-0-rest-api/5888/16 "2024-01-29T23:00:19Z")

</div>

@katz515  
ありがとうございます。folder IDの取得方法(folder URLの末尾の番号)は理解しました。

しかし、files:add のエンドポイントを API Documentation Consoleから試してみたのですが、やはり、500番エラーが発生します。

そちらでも、試していただけないでしょうか。

よろしくお願いいたします。
