// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace Admin.NET.Core; /// /// 文件流扩展方法 /// public static class StreamExtensions { /// /// 获取文件流字节 /// /// /// public static byte[] GetAllBytes(this Stream stream) { if (stream is MemoryStream memoryStream) { return memoryStream.ToArray(); } using var ms = stream.CreateMemoryStream(); return ms.ToArray(); } /// /// 获取文件流字节,异步 /// /// /// /// public static async Task GetAllBytesAsync(this Stream stream, CancellationToken cancellationToken = default) { if (stream is MemoryStream memoryStream) { return memoryStream.ToArray(); } using var ms = await stream.CreateMemoryStreamAsync(cancellationToken); return ms.ToArray(); } /// /// 复制文件流,异步 /// /// /// /// /// public static Task CopyToAsync(this Stream stream, Stream destination, CancellationToken cancellationToken) { if (stream.CanSeek) { stream.Position = 0; } // 81920 已经是默认值,但是需要设置才能传递 cancellationToken return stream.CopyToAsync(destination, 81920, cancellationToken); } /// /// 创建内存流 /// /// /// public static MemoryStream CreateMemoryStream(this Stream stream) { if (stream.CanSeek) { stream.Position = 0; } MemoryStream memoryStream = new(); stream.CopyTo(memoryStream); if (stream.CanSeek) { stream.Position = 0; } memoryStream.Position = 0; return memoryStream; } /// /// 创建内存流,异步 /// /// /// /// public static async Task CreateMemoryStreamAsync(this Stream stream, CancellationToken cancellationToken = default) { if (stream.CanSeek) { stream.Position = 0; } MemoryStream memoryStream = new(); await stream.CopyToAsync(memoryStream, cancellationToken); if (stream.CanSeek) { stream.Position = 0; } memoryStream.Position = 0; return memoryStream; } }