@@ -287,6 +287,7 @@ func NewSeekableStream(fs *FileStream, link *model.Link) (*SeekableStream, error
287287 }
288288
289289 if fs .Reader != nil {
290+ log .Debugf ("[NewSeekableStream] FileStream already has Reader (type: %T), using it directly" , fs .Reader )
290291 fs .Add (link )
291292 return & SeekableStream {FileStream : fs }, nil
292293 }
@@ -300,15 +301,10 @@ func NewSeekableStream(fs *FileStream, link *model.Link) (*SeekableStream, error
300301 if err != nil {
301302 return nil , err
302303 }
303- if _ , ok := rr .(* model.FileRangeReader ); ok {
304- var rc io.ReadCloser
305- rc , err = rr .RangeRead (fs .Ctx , http_range.Range {Length : - 1 })
306- if err != nil {
307- return nil , err
308- }
309- fs .Reader = rc
310- fs .Add (rc )
311- }
304+ // IMPORTANT: Do NOT create Reader early for FileRangeReader!
305+ // Let generateReader() create it on-demand when actually needed for reading
306+ // This prevents the Reader from being consumed by intermediate operations like hash calculation
307+ log .Debugf ("[NewSeekableStream] Created RangeReader (type: %T), Reader will be generated on-demand" , rr )
312308 fs .size = size
313309 fs .Add (link )
314310 return & SeekableStream {FileStream : fs , rangeReader : rr }, nil
@@ -332,11 +328,13 @@ func (ss *SeekableStream) RangeRead(httpRange http_range.Range) (io.Reader, erro
332328
333329// only provide Reader as full stream when it's demanded. in rapid-upload, we can skip this to save memory
334330func (ss * SeekableStream ) Read (p []byte ) (n int , err error ) {
335- log .Debugf ("[SeekableStream.Read] Called, will trigger generateReader if needed" )
331+ log .Debugf ("[SeekableStream.Read] Called with buffer size: %d" , len ( p ) )
336332 if err := ss .generateReader (); err != nil {
337333 return 0 , err
338334 }
339- return ss .FileStream .Read (p )
335+ n , err = ss .FileStream .Read (p )
336+ log .Debugf ("[SeekableStream.Read] Read %d bytes, err: %v" , n , err )
337+ return n , err
340338}
341339
342340func (ss * SeekableStream ) generateReader () error {
@@ -351,9 +349,9 @@ func (ss *SeekableStream) generateReader() error {
351349 }
352350 ss .Add (rc )
353351 ss .Reader = rc
354- log .Warnf ("[SeekableStream.generateReader] Reader has been set, stream is now consumed!" )
352+ log .Warnf ("[SeekableStream.generateReader] Reader has been set, type: %T" , rc )
355353 } else {
356- log .Debugf ("[SeekableStream.generateReader] Reader already exists, reusing" )
354+ log .Debugf ("[SeekableStream.generateReader] Reader already exists (type: %T) , reusing" , ss . Reader )
357355 }
358356 return nil
359357}
0 commit comments