Class: Mongo::Grid::FSBucket::Stream::Write
- Inherits:
-
Object
- Object
- Mongo::Grid::FSBucket::Stream::Write
- Defined in:
- lib/mongo/grid/stream/write.rb
Overview
A stream that writes files to the FSBucket.
Instance Attribute Summary collapse
-
#file_id ⇒ Object
readonly
File_id The id of the file being uploaded.
-
#filename ⇒ String
readonly
Filename The name of the file being uploaded.
-
#fs ⇒ FSBucket
readonly
Fs The fs bucket to which this stream writes.
-
#options ⇒ Hash
readonly
Options The write stream options.
Instance Method Summary collapse
-
#abort ⇒ true
Abort the upload by deleting all chunks already inserted.
-
#close ⇒ BSON::ObjectId, Object
Close the write stream.
-
#closed? ⇒ true, false
Is the stream closed.
-
#initialize(fs, options) ⇒ Write
constructor
Create a stream for writing files to the FSBucket.
-
#write(io) ⇒ Stream::Write
Write to the GridFS bucket from the source stream or a string.
-
#write_concern ⇒ Mongo::WriteConcern
Get the write concern used when uploading.
Constructor Details
#initialize(fs, options) ⇒ Write
Create a stream for writing files to the FSBucket.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/mongo/grid/stream/write.rb', line 70 def initialize(fs, ) @fs = fs @length = 0 @n = 0 @file_id = [:file_id] || BSON::ObjectId.new @options = .dup =begin WriteConcern object support if @options[:write_concern].is_a?(WriteConcern::Base) # Cache the instance so that we do not needlessly reconstruct it. @write_concern = @options[:write_concern] @options[:write_concern] = @write_concern.options end =end @options.freeze @filename = @options[:filename] @open = true @timeout_holder = CsotTimeoutHolder.new( operation_timeouts: { operation_timeout_ms: [:timeout_ms], inherited_timeout_ms: fs.database.timeout_ms } ) end |
Instance Attribute Details
#file_id ⇒ Object (readonly)
Returns file_id The id of the file being uploaded.
36 37 38 |
# File 'lib/mongo/grid/stream/write.rb', line 36 def file_id @file_id end |
#filename ⇒ String (readonly)
Returns filename The name of the file being uploaded.
41 42 43 |
# File 'lib/mongo/grid/stream/write.rb', line 41 def filename @filename end |
#fs ⇒ FSBucket (readonly)
Returns fs The fs bucket to which this stream writes.
31 32 33 |
# File 'lib/mongo/grid/stream/write.rb', line 31 def fs @fs end |
#options ⇒ Hash (readonly)
Returns options The write stream options.
46 47 48 |
# File 'lib/mongo/grid/stream/write.rb', line 46 def @options end |
Instance Method Details
#abort ⇒ true
Abort the upload by deleting all chunks already inserted.
182 183 184 185 186 187 188 |
# File 'lib/mongo/grid/stream/write.rb', line 182 def abort fs.chunks_collection.find( { :files_id => file_id }, @options.merge(timeout_ms: @timeout_holder.remaining_timeout_ms!) ).delete_many (@open = false) || true end |
#close ⇒ BSON::ObjectId, Object
Close the write stream.
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/mongo/grid/stream/write.rb', line 135 def close ensure_open! update_length files_collection.insert_one( file_info, @options.merge(timeout_ms: @timeout_holder.remaining_timeout_ms!) ) @open = false file_id end |
#closed? ⇒ true, false
Is the stream closed.
170 171 172 |
# File 'lib/mongo/grid/stream/write.rb', line 170 def closed? !@open end |
#write(io) ⇒ Stream::Write
Write to the GridFS bucket from the source stream or a string.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/mongo/grid/stream/write.rb', line 104 def write(io) ensure_open! @indexes ||= ensure_indexes! @length += if io.respond_to?(:bytesize) # String objects io.bytesize else # IO objects io.size end chunks = File::Chunk.split(io, file_info, @n) @n += chunks.size unless chunks.empty? chunks_collection.insert_many( chunks, timeout_ms: @timeout_holder.remaining_timeout_ms! ) end self end |
#write_concern ⇒ Mongo::WriteConcern
Get the write concern used when uploading.
154 155 156 157 158 159 160 |
# File 'lib/mongo/grid/stream/write.rb', line 154 def write_concern @write_concern ||= if wco = @options[:write_concern] || @options[:write] WriteConcern.get(wco) else fs.write_concern end end |