kurakasi0802
@kurakasi0802

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

WEBサイトのフロントエンドから新規のディレクトリを作るには?

フロントエンドから新規のディレクトリを作るボタンみたいなのを作りたいです。
どうしたらいいですか?
出来たらディレクトリ名も自由に決められるようにしたいです。

1

6Answer

root
  |- css
  |- js
  |- index.html
  |- about
  |- column
  |- user-updates

上記のような例示構成で想定します。
user-updatesという指定のディレクトリに、サイト訪問者が任意のディレクトリ(フォルダ)をアップロードできるようにしたい。ということでしょうか?

質問意図を履き違えていたら申し訳ないですが、
上記だと以下で実装できるかもです(※筆者未検証です)

1Like

あなたの言う「WEBサイトのフロントエンド」って何ですか? ブラウザで動く JavaScript で PC のファイルシステムを操作してしてディレクトリを作りたいと言ってますか?

0Like

Comments

  1. @kurakasi0802

    Questioner

    レンタルサーバーでWEBサイトを運営していて、そのWebサイトに訪れた人が指定の場所に任意の名前のディレクトリ(フォルダ)を作ることが出来るようにしたいという意味です。

  2. その「指定の場所」というのはどこですか?

    サーバーのことなら普通そんなことは考えもしないから、ブラウザが動いている PC のファイルシステムのことかな?

    そうだとしてもやっぱりそんなことは普通は考えないのですが・・・

    そもそも何のためにフォルダを作りたいのですか? XY 問題になっているように思えます。X, Y 両方書いてください。

ローカルファイルシステムへの書き込みはセキュリティ上の懸念から結構制約があります.詳しいことはこの辺を.
現状この機能はChromiumに限られた実装でありFirefoxやSafariでは使用できません.

サーバー上のファイルシステムを操作させる際はもっと慎重に設計してください.そもそもファイルの読み書きを遠隔で行えてしまうのがリスクですので…

0Like

フロントエンドに加えて、ディレクトリ作成機能をもつバックエンドを用意するような実現方法となるように思います

例として、jupyter notebookではフロントエンドの操作からディレクトリを作れるのでどうやっているのか調べました
jupyter notebookはバックエンドにjupyter serverを動作させていて、フロントエンドからの要求に対して実際にディレクトリを作るのはjupyter serverです

処理の流れとしてはフロントエンドのjupyter notebookからはjupyter serverのAPIエンドポイント/api/contents/<path>
に対して、作成するディレクトリを指定したJSONをPUTします
jupyter serverの方ではこの要求を受けて、最終的にはos.mkdirが呼び出されてディレクトリが作られます

参考

    async def _save_directory(self, os_path, model, path=""):
        """create a directory"""
        if not self.allow_hidden and is_hidden(os_path, self.root_dir):
            raise web.HTTPError(400, "Cannot create hidden directory %r" % os_path)
        if not os.path.exists(os_path):
            with self.perm_to_403():
                await run_sync(os.mkdir, os_path)
        elif not os.path.isdir(os_path):
            raise web.HTTPError(400, "Not a directory: %s" % (os_path))
        else:
            self.log.debug("Directory %r already exists", os_path)
0Like

Your answer might help someone💌