| Class | StorageObject |
| In: |
app/models/storage_object.rb
|
| Parent: | ActiveRecord::Base |
ファイルの内容を読み出す。
# File app/models/storage_object.rb, line 77
77: def content
78: File.open(path, "rb", &:read)
79: end
複製操作のためにコピーする。失敗した場合は false を返す。
# File app/models/storage_object.rb, line 82
82: def copy
83: copied = self.class.new
84: copied.attributes = attributes
85: if copied.save
86: if length == File.open(copied.path, "wb") {|f| f.write File.open(path, "rb", &:read)}
87: return copied
88: end
89: end
90: return false
91: end
保存先としてのラベルの文字列を返す。
# File app/models/storage_object.rb, line 31
31: def location
32: s_("StorageObject|Server")
33: end
保存先のパスを返す。
# File app/models/storage_object.rb, line 36
36: def path
37: storage = Storage.current
38: storage.root + storage.separator + id.to_s
39: end
ファイル x を保存する。
# File app/models/storage_object.rb, line 42
42: def store(x)
43: if Storage.current.available?
44: if x.is_a?(Tempfile)
45: File.rename(x.path, path)
46: else
47: File.open(path, "wb") do |f|
48: f.write x.read
49: end
50: end
51: File.chmod(0644, path)
52: self.length = File.size(path)
53: begin
54: ConfigAttachment.current.validate_length(self.length)
55: rescue ConfigAttachment::MaximumLengthError
56: unlink
57: raise
58: end
59: else
60: self.length = x.length
61: end
62: # x has instance method 'original_filename'.
63: # cf. http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html
64: if x.respond_to?("original_path") # Rails 2.0.x -- http://dev.rubyonrails.org/changeset/7759
65: fpath = x.original_path
66: elsif x.respond_to?("full_original_filename") # Rails 1.2.6 -- http://dev.rubyonrails.org/changeset/2345
67: fpath = x.full_original_filename
68: else
69: fpath = x.original_filename
70: end
71: epath = URI.encode(fpath.gsub('\\','/'))
72: self.uri = "file:///#{epath}"
73: return save
74: end