1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.js(axios)からDirectCloud-BOX APIでファイルアップロード

Posted at

DirectCloud-BOX APIのAPIを触ってみてました。

なかなか公式情報がなく、Qiitaに書いてくれている皆さんの記事のおかげでなんとか進められるというAPIで苦戦しました。

ちなみにこの実装をもとに作ったのは別記事にまとめてます。

紙で申請を出す居酒屋店員のシフト希望と管理業務をちょっとスマートにする

突然nodeという値

こちらに記事で紹介されている 突然のnode

uploadを試す前に、nodeって値を取得する必要がある模様です。

nodeを無指定でフォルダリストの照会を行うと起点となるnodeの値が取れる模様。
(それでもまたよく分からないけど)

https://directcloud.jp/api_reference/detail/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC/Folder#%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E7%85%A7%E4%BC%9A

getnode.js
'use strcit';

const axios = require('axios');

const FormData = require('form-data');

const BASE_URL = `https://api.directcloud.jp`;
const URL = `${BASE_URL}/openapp/v1/folders/index/?lang=eng`
const token = `xxxxxxxxxxxxxx`

const main = async () => {
    const bodyFormData = new FormData();

    const res = await axios.get(URL, bodyFormData, {
        headers: {
            access_token: token,
            ...bodyFormData.getHeaders()
        }
    });
    console.log(res.data);
};

main();

実行してみると

$ node getnode.js 
{
  success: true,
  lists: [
    {
      dir_seq: '0000000',
      node: '1',
      name: 'My Box',
      type: 'my',
      datetime: '2021-08-25 09:27:20'
    },
    {
      dir_seq: '0000000',
      node: '1{2',
      name: 'Shared Box',
      type: 'shared',
      datetime: '2021-08-25 08:37:48'
    }
  ]
}

みたいな値が取れました。dir_seqがそれっぽい値かと思いきやnodeって1とかの数字なんですね。

おそらくフォルダの内部の管理IDみたいなものな気がします。

My Boxっていうフォルダでnodeの値は1ってのが分かりました。

ただファイルをアップロードしてみるだけならとりあえずnodeの値を1って指定で良い気がします()

アップロードを試す

ドキュメントはこちらです。 nodeの値がわかったらあとは同じ要領でアップロードの処理も書けました。

https://directcloud.jp/api_reference/detail/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC/File#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89

ドキュメント上ではエンドポイントは/openapp/v1/files/upload/{node}って表記ですが、先程の手順でnodeの値1で良さそうってのが分かったので/openapp/v1/files/upload/1という指定にしています。

upload.js
'use strcit';

const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data');

const BASE_URL = `https://api.directcloud.jp`;
const URL = `${BASE_URL}/openapp/v1/files/upload/1?lang=eng`
const token = `xxxxxxxxxxxxxxxxxxxx`

const imageFilePath = `./image.png`;

const main = async () => {

    const bodyFormData = new FormData();
    const file = fs.createReadStream(imageFilePath);

    bodyFormData.append('Filedata', file);
    const res = await axios.post(URL, bodyFormData, {
        headers: {
            access_token: token,
            ...bodyFormData.getHeaders()
        }
    });
    console.log(res.data);
};

main();

実行してみたら成功している模様なのでアップロード出来たのだと思います。

$ node upload.js 
{
  success: true,
  file_seq: 287745501,
  name: 'image.png',
  extension: 'png',
  size: 87082,
  sizetext: '85.04KB'
}

Webアプリで確認出来る!

このWebアプリのURLもよく分からないですがQiitaの誰かのリンクから見つけました。

https://web.directcloud.jp/home

まさかこんなページがあるとは。まじでこんなページあるといいなぁって思ってたやつなのですが、あるんですね。

(確認するためにわざわざAPIを叩かないといけないのかと思って試しててだるかったです)

スクリーンショット 2021-08-26 5.27.18.png

実際にアップロードした写真もちゃんと見れます。

スクリーンショット 2021-08-26 12.07.44.png

参考記事など

本当に皆さんの知見に助けられています。ありがとうございます。

参考: DirectCloud-BOXにファイルをアップロードするGitHub Actionを作ってみた
参考: Node.js + axios で 画像を mulitpart/form-data でアップロードしようとしてハマった話

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?