Posted by redboxhosting on July 28, 2014 at 11:08am
初めまして、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
文章の続き
今回の問題は5の部分で、ファイルアップロード時にログインユーザーのIDなどを取得しディレクトリを作成してアップロードできるようなアップローダーを探しています。
Web File Managerなどいくつかのモジュールをためしてみたのですが、どのユーザーも全て同じディレクトリーにファイルがアップロードされてしまうためなにか解決策があればアドバイス頂けると助かります。
尚、ファイルへのアクセス自体はユーザー毎に制限する必要はありません。
よろしくお願いします。
利用されるアップローダーの実装によっては使えないかもしれま
利用されるアップローダーの実装によっては使えないかもしれませんが、filefield_pathsモジュール[1] でアップロード先のpathをuser idなどのtokenから動的に設定する事ができます。
blauerbergさん 初めまして。 まさにこのようなも
blauerbergさん
初めまして。
まさにこのようなものを探していました。現在検証中ですが一応うまく動作しているようです。
アップローダーはこちらのものを利用中です。
https://www.drupal.org/project/jquery_file_upload
よろしくお願いします。
はじめまして。 次の要件を満たせるモジュールをお探しとのこ
はじめまして。
次の要件を満たせるモジュールをお探しとのことですね。
パッと見たところですと「 File (Field) Paths 」というモジュールが要件を満たすのではないかと思います。
File (Field) Paths
https://www.drupal.org/project/filefield_paths
手短に設定の手順をご説明しますと
(たとえば今回例にあげてらっしゃるように
ユーザ2 -> http://ドメイン名/file/user2/file2.txt
とされたいのであれば user[current-user:uid]/ などと指定します)
という手順になるかと思います。
ただ、こちら Drupal 7 用は現在β版でオープンバグもあるようですので
その点認識された上でお使いいただくのがよろしいかと思います。
ご参考になればと思います。
hgotoさん こんにちわ。 ご丁寧なご回答ありがとうござ
hgotoさん
こんにちわ。
ご丁寧なご回答ありがとうございます。 こちらのフローにそって設定したところ、無事にファイルをアップロードした際に任意のPathを入れられるようになりました。
ID以外にもユーザー名やその他様々な値を設定できるようですので、かなり柔軟なカスタマイズが出来そうです。
しかし、ユーザー1が自分自身でアカウントをコンテンツも含めて削除をした場合、やはりディレクトリとその中にあるファイルも含めサーバー側に残ってしまうようでして、なにかこのあたりを自動化できる仕組みはないものでしょうか。
Pathautoというモジュールをいれて何かをすれば不要なPathが消えるようなのですが・・・
最悪、退会処理をユーザーにさせず管理者側で都度行い、ファイルやフォルダを手動で削除することによる回避も検討しています。
よろしくお願いします。
redboxhosting
redboxhosting さん、こんにちは。
素早くお返事いただきありがとうございます。
ファイルとディレクトリを分けて考えるのがよろしいかと思います。
まずはファイルに関しまして。 アカウントが削除された際にフ
まずはファイルに関しまして。
アカウントが削除された際にファイルもあわせて削除するようにするには、押さえるべきポイントが 2 点あります。
1 に関しては、アカウントが「無効化」されただけでは実際にはデータとしては残っており削除されていないため注意が必要です。
2 に関しては、管理画面の
/admin/config/people/accounts
のページに設定があります。
「ユーザーアカウントが無効になるときに」のラジオボタンで「このアカウントと作成されたコンテンツを削除します。」を選択してみてください。
この 2 つのポイントが押さえられていれば、「ユーザが削除されればコンテンツも削除されて、コンテンツが削除されればコンテンツに添付される形でアップロードされていたファイルもあわせて削除される」ようになるかと思います。
(私の環境で実際に File (Field) Paths でファイルを配置してからユーザを削除してみたところ、ファイルも削除されました)
いま一度お試しいただければと思います。
つづいてディレクトリに関しまして。 こちらはご認識のとおり
つづいてディレクトリに関しまして。
こちらはご認識のとおり File (Field) Paths ではサポートしていないようですので、、やるとすれば「 files 内の空のディレクトリを探して削除する」という処理を Drupal の cron に加える( hook_cron を書く)方法が最もシンプルでやりやすいのではないかと思います。
(処理がシンプルですので、 Drupal にやらせず何か別のスクリプトを走らせてしまってもよいかもしれません)
ちなみに Pathauto はまた別の用途のためのものですのでここではお役に立たないかもしれません。
ご参考になれば幸いです。
(長文になるとスパムとご認識されてしまい投稿できなかったためコメント分割させていただきました。。)
早速アドバイス頂きありがとうございます。 ファイルに関して
早速アドバイス頂きありがとうございます。
ファイルに関しては、ユーザー削除時に”コンテンツも含む”とすることでディレクトリ内のファイルの削除を確認出来ました。
ディレクトリに関してはやはり現状のモジュールでは難しいようですので、BASHスクリプトを作成し、サーバー側のCronで回して空ディレクトリを定期的に削除するようにしたいと思います。
色々と迅速なアドバイスありがとうございました。 これで想定していたような実装が可能になりそうです!
ご丁寧にお返事いただきありがとうございます。 これで想定し
ご丁寧にお返事いただきありがとうございます。
よかったです。無事に解決されたようで何よりです!
すみません
お世話になります。先日File FieldPathsを教えて頂き無事標準のUploadをつかい、任意のパスを追加する事ができたのですが、今回アップロードしたファイルの保存先をDrupal内ではなく、外部のFTPサーバーに変更しようとしています。
つづき1
そこで、StorageAPIモジュールを設定しました。しかし指定したパスを含めて外部FTPサイトでディレクトリを作成してくれない問題が発生し、同じファイル名のファイルをUPすると同じディレクトリに連番でファイルが作成されてしまいます。
おそらくStorageAPI側?の問題なのかもしれませんが、フォーラムなどもみたのですがFIXしてるのか継続中なのかもわからず困っております。もし同じようなことが他のモジュールで出来るようであれば何かアドバイス頂けると助かります。
お使いのftpサーバでmkdirコマンドが許可されていない
お使いのftpサーバでmkdirコマンドが許可されていないというケースも有り得ます。
問題の切り分けのため、drupalではなくftpクライアントでmkdirできるか試してみてはどうでしょう?
FTPについて
blauerberg さんこんにちわ
FTPクライアントでは正常にMKDIRできます。
またDrupalでファイルをアップロードした際のFTPサーバー上のログではMKDIRしている形跡が見つからず。。。
そのため、ディレクトリ自体の作成がされていないのではないかと判断した次第です。
よろしくお願いします。