アップロードされたファイルの名前を変更する

最近、学術プレゼンテーションの PDF ファイルをアップロードしています(たまたま、季節性気候予測に関するこのトピックです)。

私が採用しているファイル名付けの規則は以下の通りです:

  • 0000-leadauthor-[etal-]title-title-title.pdf

ここまでは問題ありませんでした。しかし、主要著者の名前を誤って登録していたことに気づきました。同じファイルを修正したファイル名でアップロードしようとすると、Discourse はファイルがそれ以外では同一であると検知し(おそらくハッシュ処理が行われているのでしょう)、元のファイルへの参照を返してきます。ファイル名は変更されず、依然として誤ったままです。

私の回避策は、以下の設定を 1 に変更することです(デフォルトは 48)。その後、マークアップ内からのすべての参照を削除し、結果として生じるファイルの削除処理が完了するまで待ちます:

  • Settings > Files > clean orphan uploads grace period hours

また、このパラメータを 0 に設定しようと試みましたが、うまくいかなかったようです。その場合、ツールチップは「無効にするには 0 に設定してください」といったように修正されるべきかもしれません。あるいは、適切な表現として「即時に反映させるには 0 に設定してください」とすることも考えられます。

この種のメンテナンスがどのくらいの頻度で実行されているのかは分かりませんが、私は毎時間実行されていると推測していました。もしかしたら毎日でしょうか?これも知っておくと役立つ情報です。

ファイル名変更プロセスを加速する方法について、ご支援をいただきありがとうございます!回避策はありますが、やや不器用で時間がかかります。

時間ごと…

Ruby に詳しくないのですが、これも 01 を意味しているように見えます。パラメータのヒントには、「0 は 1 として解釈されます」といった記述を追加すべきかもしれません。特に、他の状況ではゼロが「無効」を意味することが多いためです。@neounix さん、ありがとうございます。

自前でホストしている場合、やりたいことは Rails コンソールでアップロードレコードを更新することだと思います。API でそれが可能かどうかは確認していませんが、おそらくできないでしょう。

私たちは自己ホスティング環境です。シェルアカウントへのアクセスを提案されましたが、まだ対応していません。ヒントをいただき、ありがとうございます。

ちょっと待って。あなたが何をしようとしているのか、あまりよくわかりません。投稿にアップロードされた際に表示される名前を変更したいということでしょうか?もしそうなら、以下のようなコマンドを試してみるのがよいかもしれません。

rake posts:remap["old-name.pdf","newname.pdf"]

これは「すべての投稿内の文字列を置換する」で説明されています。あなたの目的からすれば、Upload モデル内の元のファイル名は実際には重要ではないと思います。

ただし、以下のように変更することも可能です。

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

このアップロードを使って投稿を再構築してみましたが、何も変化はありませんでした。

編集:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

これを貼り付けると、以下のように実行できます。

rename_upload('name.pdf','better-name.pdf')

これにより、ダウンロード時により良いファイル名が適用されるようになります。

かつて私が学者だった頃、私は 私なりの 独自の PDF 命名ルールを持っていました。それは他の誰とも違っていました。妻もまた、自分なりのルールを持っていると思います。おそらく、あなたがファイル名を「正しく」設定したとしても、誰も気に入らないでしょうね。:wink:

意図した操作ではありませんでした。leadauthor という文字列は単にファイル名の一部でした。それ以上でも以下でもありません。しかし、ファイル名を修正しようとした際(スペインの学者の命名慣習についての私の理解が非常に限られているため)、名前を変更したファイルをアップロードしようとすると、Discourse がそのファイルに同じファイルがマニフェストに含まれていることに気づき、元のターゲットとファイル名に切り替わってしまいました。これは機能と見なせるかもしれませんね?:roll_eyes: そのファイルをサイトデータベースから完全に削除するまで、修正されたファイル名のものをアップロードできませんでした。@pfaffman さん、ご協力とご関心に心から感謝いたします。

「filename」はどこに表示されていますか?ファイルシステム上の実際のファイル名はランダムな文字列です。

私のインスタンスでテストしたところ、[filename.pdf|attachment](upload://filehash.pdf) のファイル名を変更しても、投稿上には filename.pdf と表示されるものの、ダウンロード時には元のファイル名のままです。おそらく、彼が求めているのもこれと同じことで、ダウンロード時に使用されるファイル名を変更したいのでしょう。

致命的な問題ではありませんが、アップロードされたファイルの名前も変更できるようにしてほしいです。

ああ、なるほど。その3行のRailsコードで目的の動作が実現できますね。投稿の表示自体は変わりませんが、ファイルをクリックすると「better-name.pdf」という名前で保存されます。

「いいね!」 2

ご回答いただいた皆様、ありがとうございます。

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.