- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby/Ruby on Rails/FCKEditor/Easy FCKEditor

はじめに Edit

../ソースメモ書きにも書きましたが、
簡易アップロード時に同名ファイルがアップロードできない気がする点。
→実際には同名ファイルをアップすると上書きしてしまうようでした ><;;

これはこれで正しい挙動かもしれないですが、
簡単アップロードだと上書きするか特に質問もでずに、
そのまま上書きしてしまうので困りものです…。

上書きせずに連番の名前をつけるパッチ Edit

アップロード時にファイルに書き込む時、ファイル名を返す時に @new_file.original_filename が決めうちでファイル名になっているため、すでにファイルがある場合は連番のファイル名を付加することにしました。

動作的には以下のような感じでです。

  1. hoge.jpg をアップロードしようとした場合、
    hoge.jpg がすでにあるなら、hoge_0001.jpgという名前にする
  2. hoge_0001.jpg がすでにあるなら、hoge_0002.jpgという名前にする
    上記を繰り返して空いているファイル名をつける
  3. 新たに決まった名前で保存する
Index: vendor/plugins/easy-fckeditor/app/controllers/fckeditor_controller.rb
===================================================================
--- vendor/plugins/easy-fckeditor/app/controllers/fckeditor_controller.rb	(revision 307)
+++ vendor/plugins/easy-fckeditor/app/controllers/fckeditor_controller.rb	(revision 308)
@@ -159,7 +159,7 @@
   # Copy tmp file to current_directory_path/tmp_file.original_filename
   #
   def copy_tmp_file(tmp_file)
-    path = current_directory_path + "/" + tmp_file.original_filename
+    path = File.join(current_directory_path, uploaded_filename(tmp_file))
     File.open(path, "wb", 0664) do |fp|
       FileUtils.copy_stream(tmp_file, fp)
     end
@@ -204,9 +204,24 @@
   # Current uploaded file path
   #
   def uploaded_file_path
-    "#{upload_directory_path}/#{@new_file.original_filename}"
+    "#{upload_directory_path}/#{uploaded_filename}"
   end
 
+  def uploaded_filename(new_file = @new_file)
+    return @new_filename if @new_filename
+
+    # hoge.jpgがすでにあるならhoge_0001.jpg みたいなファイル名にしておく
+    @new_filename = new_file.original_filename
+    dir = current_directory_path
+    num = 1
+    while File.exists?(File.join(dir, @new_filename))
+      @new_filename = File.basename(new_file.original_filename, ".*") + "_" + ("%.4d" % num) + File.extname(new_file.original_filename)
+      num += 1
+    end
+
+    return @new_filename
+  end
+
   ##############################################################################
   # check that the file is a tempfile object
   #

[TODO]: githubにEasy FCKEditor 修正版をおいて簡単に組み込めるようにする


No comment. Comments/Ruby/Ruby on Rails/FCKEditor/Easy FCKEditor/同名ファイルが上書きされてしまう件?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-02-24 Wed 15:23:15 JST (2765d)