Skip to content

Commit 3866923

Browse files
committed
Azure CloudBlockBlob stream throws on Length access. Fetch Position instead.
1 parent c9b7388 commit 3866923

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/Libraries/SmartStore.Services/Media/Storage/MediaStorageItem.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,20 @@ public Stream SourceStream
3333
public abstract void SaveTo(Stream stream, MediaFile mediaFile);
3434
public abstract Task SaveToAsync(Stream stream, MediaFile mediaFile);
3535

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+
3650
public virtual void Dispose()
3751
{
3852
if (_sourceStream != null)
@@ -82,13 +96,13 @@ protected override Stream GetSourceStream()
8296
public override void SaveTo(Stream stream, MediaFile mediaFile)
8397
{
8498
_image.Save(stream);
85-
mediaFile.Size = (int)stream.Length;
99+
mediaFile.Size = GetLength(stream);
86100
}
87101

88102
public override Task SaveToAsync(Stream stream, MediaFile mediaFile)
89103
{
90104
_image.Save(stream);
91-
mediaFile.Size = (int)stream.Length;
105+
mediaFile.Size = GetLength(stream);
92106
return Task.CompletedTask;
93107
}
94108
}
@@ -121,7 +135,7 @@ public override void SaveTo(Stream stream, MediaFile mediaFile)
121135
stream.Position = 0;
122136
}
123137

124-
mediaFile.Size = (int)stream.Length;
138+
mediaFile.Size = GetLength(stream);
125139
}
126140

127141
public override async Task SaveToAsync(Stream stream, MediaFile mediaFile)
@@ -138,7 +152,7 @@ public override async Task SaveToAsync(Stream stream, MediaFile mediaFile)
138152
stream.Position = 0;
139153
}
140154

141-
mediaFile.Size = (int)stream.Length;
155+
mediaFile.Size = GetLength(stream);
142156
}
143157
}
144158

0 commit comments

Comments
 (0)