2
0
Luke Pulverenti 8 жил өмнө
parent
commit
29185eb9bd

+ 32 - 4
Emby.Server.Implementations/Services/ResponseHelper.cs

@@ -141,16 +141,44 @@ namespace Emby.Server.Implementations.Services
                 response.ContentType += "; charset=utf-8";
             }
 
-            var writeToOutputStreamResult = await WriteToOutputStream(response, result).ConfigureAwait(false);
-            if (writeToOutputStreamResult)
+            var asyncStreamWriter = result as IAsyncStreamWriter;
+            if (asyncStreamWriter != null)
+            {
+                await asyncStreamWriter.WriteToAsync(response.OutputStream, CancellationToken.None).ConfigureAwait(false);
+                return;
+            }
+
+            var streamWriter = result as IStreamWriter;
+            if (streamWriter != null)
+            {
+                streamWriter.WriteTo(response.OutputStream);
+                return;
+            }
+
+            var stream = result as Stream;
+            if (stream != null)
             {
+                using (stream)
+                {
+                    await stream.CopyToAsync(response.OutputStream).ConfigureAwait(false);
+                    return;
+                }
+            }
+
+            var bytes = result as byte[];
+            if (bytes != null)
+            {
+                response.ContentType = "application/octet-stream";
+                response.SetContentLength(bytes.Length);
+
+                await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
                 return;
             }
 
             var responseText = result as string;
             if (responseText != null)
             {
-                var bytes = Encoding.UTF8.GetBytes(responseText);
+                bytes = Encoding.UTF8.GetBytes(responseText);
                 response.SetContentLength(bytes.Length);
                 await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
                 return;
@@ -163,7 +191,7 @@ namespace Emby.Server.Implementations.Services
         {
             var contentType = request.ResponseContentType;
             var serializer = RequestHelper.GetResponseWriter(HttpListenerHost.Instance, contentType);
-            
+
             using (var ms = new MemoryStream())
             {
                 serializer(result, ms);