ファイルアップローダーについて

Events happening in the community are now at Drupal community events on www.drupal.org.
redboxhosting's picture

初めまして、drupal初心者です。

現在、以下のような要件でサイトを構築予定なのですがなかなかスムーズに行かずアドバイス頂けると助かります。

ファイルアップローダーサイトを構築

したいと考えています。

要件

1:ユーザーは誰でもWEBから登録可能
2:登録したユーザーはアップローダーを使い任意のファイルを公開できる
3:アップロードするファイルの種類を制限する
4:1ユーザー毎に保存できるファイルのサイズ上限を指定する
5:アップロード時に、ログインユーザー名もしくはIDのディレクトリが自動で作成されその中にファイルがアップロードされる。
※複数ユーザーが自分自身のファイルのアップロードや削除ができ、且つ同じディレクトリにアップロードされないようにしたい。

例
ユーザー1
file1.txt
公開URL http://ドメイン名/file/user1/file1.txt

ユーザー2
file2.txt
公開URL http://ドメイン名/file/user2/file2.txt

1はDrupalの標準の機能で問題ありませんでした。
2は公開されているアップローダーなどを利用します
3はアップローダーでできるといいですが、難しい場合はMimetypesで制限する予定です。
4:こちらもDrupalの標準の機能で制限できそうでした。

Comments

文章の続き

redboxhosting's picture

今回の問題は5の部分で、ファイルアップロード時にログインユーザーのIDなどを取得しディレクトリを作成してアップロードできるようなアップローダーを探しています。

Web File Managerなどいくつかのモジュールをためしてみたのですが、どのユーザーも全て同じディレクトリーにファイルがアップロードされてしまうためなにか解決策があればアドバイス頂けると助かります。

尚、ファイルへのアクセス自体はユーザー毎に制限する必要はありません。

よろしくお願いします。

blauerberg's picture

利用されるアップローダーの実装によっては使えないかもしれませんが、filefield_pathsモジュール[1] でアップロード先のpathをuser idなどのtokenから動的に設定する事ができます。

redboxhosting's picture

blauerbergさん

初めまして。

まさにこのようなものを探していました。現在検証中ですが一応うまく動作しているようです。

アップローダーはこちらのものを利用中です。

https://www.drupal.org/project/jquery_file_upload

よろしくお願いします。

hgoto's picture

はじめまして。

次の要件を満たせるモジュールをお探しとのことですね。

5:アップロード時に、ログインユーザー名もしくはIDのディレクトリが自動で作成されその中にファイルがアップロードされる。

パッと見たところですと「 File (Field) Paths 」というモジュールが要件を満たすのではないかと思います。

File (Field) Paths
https://www.drupal.org/project/filefield_paths

手短に設定の手順をご説明しますと

  1. File (Field) Paths モジュールをインストールして、
  2. パスを自動で設定したいファイルフィールドの設定画面を開くと、
  3. 「FILE (FIELD) PATH SETTINGS」という欄があるのでそこを開いて、
  4. 「File path」のところにディレクトリ名のルールを記入する
    (たとえば今回例にあげてらっしゃるように
     ユーザ2 -> http://ドメイン名/file/user2/file2.txt
     とされたいのであれば user[current-user:uid]/ などと指定します)

という手順になるかと思います。

ただ、こちら Drupal 7 用は現在β版でオープンバグもあるようですので
その点認識された上でお使いいただくのがよろしいかと思います。
ご参考になればと思います。

redboxhosting's picture

hgotoさん

こんにちわ。

ご丁寧なご回答ありがとうございます。 こちらのフローにそって設定したところ、無事にファイルをアップロードした際に任意のPathを入れられるようになりました。

ID以外にもユーザー名やその他様々な値を設定できるようですので、かなり柔軟なカスタマイズが出来そうです。

しかし、ユーザー1が自分自身でアカウントをコンテンツも含めて削除をした場合、やはりディレクトリとその中にあるファイルも含めサーバー側に残ってしまうようでして、なにかこのあたりを自動化できる仕組みはないものでしょうか。

Pathautoというモジュールをいれて何かをすれば不要なPathが消えるようなのですが・・・

最悪、退会処理をユーザーにさせず管理者側で都度行い、ファイルやフォルダを手動で削除することによる回避も検討しています。

よろしくお願いします。

redboxhosting

hgoto's picture

redboxhosting さん、こんにちは。

素早くお返事いただきありがとうございます。

しかし、ユーザー1が自分自身でアカウントをコンテンツも含めて削除をした場合、やはりディレクトリとその中にあるファイルも含めサーバー側に残ってしまうようでして、なにかこのあたりを自動化できる仕組みはないものでしょうか。

ファイルとディレクトリを分けて考えるのがよろしいかと思います。

hgoto's picture

まずはファイルに関しまして。

アカウントが削除された際にファイルもあわせて削除するようにするには、押さえるべきポイントが 2 点あります。

  1. アカウントが実際に「削除」されるようにすること
  2. アカウントが削除されたときにコンテンツもあわせて削除されるように設定しておくこと

1 に関しては、アカウントが「無効化」されただけでは実際にはデータとしては残っており削除されていないため注意が必要です。

2 に関しては、管理画面の

/admin/config/people/accounts

のページに設定があります。
「ユーザーアカウントが無効になるときに」のラジオボタンで「このアカウントと作成されたコンテンツを削除します。」を選択してみてください。

この 2 つのポイントが押さえられていれば、「ユーザが削除されればコンテンツも削除されて、コンテンツが削除されればコンテンツに添付される形でアップロードされていたファイルもあわせて削除される」ようになるかと思います。
(私の環境で実際に File (Field) Paths でファイルを配置してからユーザを削除してみたところ、ファイルも削除されました)

いま一度お試しいただければと思います。

hgoto's picture

つづいてディレクトリに関しまして。

こちらはご認識のとおり File (Field) Paths ではサポートしていないようですので、、やるとすれば「 files 内の空のディレクトリを探して削除する」という処理を Drupal の cron に加える( hook_cron を書く)方法が最もシンプルでやりやすいのではないかと思います。
(処理がシンプルですので、 Drupal にやらせず何か別のスクリプトを走らせてしまってもよいかもしれません)

ちなみに Pathauto はまた別の用途のためのものですのでここではお役に立たないかもしれません。

ご参考になれば幸いです。

(長文になるとスパムとご認識されてしまい投稿できなかったためコメント分割させていただきました。。)

redboxhosting's picture

早速アドバイス頂きありがとうございます。

ファイルに関しては、ユーザー削除時に”コンテンツも含む”とすることでディレクトリ内のファイルの削除を確認出来ました。 

ディレクトリに関してはやはり現状のモジュールでは難しいようですので、BASHスクリプトを作成し、サーバー側のCronで回して空ディレクトリを定期的に削除するようにしたいと思います。

色々と迅速なアドバイスありがとうございました。 これで想定していたような実装が可能になりそうです!

hgoto's picture

ご丁寧にお返事いただきありがとうございます。

これで想定していたような実装が可能になりそうです!

よかったです。無事に解決されたようで何よりです!

すみません

redboxhosting's picture

お世話になります。先日File FieldPathsを教えて頂き無事標準のUploadをつかい、任意のパスを追加する事ができたのですが、今回アップロードしたファイルの保存先をDrupal内ではなく、外部のFTPサーバーに変更しようとしています。

つづき1

redboxhosting's picture

そこで、StorageAPIモジュールを設定しました。しかし指定したパスを含めて外部FTPサイトでディレクトリを作成してくれない問題が発生し、同じファイル名のファイルをUPすると同じディレクトリに連番でファイルが作成されてしまいます。

おそらくStorageAPI側?の問題なのかもしれませんが、フォーラムなどもみたのですがFIXしてるのか継続中なのかもわからず困っております。もし同じようなことが他のモジュールで出来るようであれば何かアドバイス頂けると助かります。

blauerberg's picture

お使いのftpサーバでmkdirコマンドが許可されていないというケースも有り得ます。
問題の切り分けのため、drupalではなくftpクライアントでmkdirできるか試してみてはどうでしょう?

FTPについて

redboxhosting's picture

blauerberg さんこんにちわ

FTPクライアントでは正常にMKDIRできます。
またDrupalでファイルをアップロードした際のFTPサーバー上のログではMKDIRしている形跡が見つからず。。。

そのため、ディレクトリ自体の作成がされていないのではないかと判断した次第です。

よろしくお願いします。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: