@@ -33,6 +33,20 @@ public Stream SourceStream
33
33
public abstract void SaveTo ( Stream stream , MediaFile mediaFile ) ;
34
34
public abstract Task SaveToAsync ( Stream stream , MediaFile mediaFile ) ;
35
35
36
+ protected static int GetLength ( Stream stream )
37
+ {
38
+ if ( stream . CanSeek )
39
+ {
40
+ return ( int ) stream . Length ;
41
+ }
42
+ else if ( stream . Position > 0 )
43
+ {
44
+ return ( int ) stream . Position ;
45
+ }
46
+
47
+ return 0 ;
48
+ }
49
+
36
50
public virtual void Dispose ( )
37
51
{
38
52
if ( _sourceStream != null )
@@ -82,13 +96,13 @@ protected override Stream GetSourceStream()
82
96
public override void SaveTo ( Stream stream , MediaFile mediaFile )
83
97
{
84
98
_image . Save ( stream ) ;
85
- mediaFile . Size = ( int ) stream . Length ;
99
+ mediaFile . Size = GetLength ( stream ) ;
86
100
}
87
101
88
102
public override Task SaveToAsync ( Stream stream , MediaFile mediaFile )
89
103
{
90
104
_image . Save ( stream ) ;
91
- mediaFile . Size = ( int ) stream . Length ;
105
+ mediaFile . Size = GetLength ( stream ) ;
92
106
return Task . CompletedTask ;
93
107
}
94
108
}
@@ -121,7 +135,7 @@ public override void SaveTo(Stream stream, MediaFile mediaFile)
121
135
stream . Position = 0 ;
122
136
}
123
137
124
- mediaFile . Size = ( int ) stream . Length ;
138
+ mediaFile . Size = GetLength ( stream ) ;
125
139
}
126
140
127
141
public override async Task SaveToAsync ( Stream stream , MediaFile mediaFile )
@@ -138,7 +152,7 @@ public override async Task SaveToAsync(Stream stream, MediaFile mediaFile)
138
152
stream . Position = 0 ;
139
153
}
140
154
141
- mediaFile . Size = ( int ) stream . Length ;
155
+ mediaFile . Size = GetLength ( stream ) ;
142
156
}
143
157
}
144
158
0 commit comments