@@ -67,22 +67,36 @@ func (rw *responseWriter) Write(b []byte) (int, error) {
67
67
// The status will be StatusOK if WriteHeader has not been called yet
68
68
rw .WriteHeader (http .StatusOK )
69
69
}
70
- size , err := rw .ResponseWriter .Write (b )
71
- rw .size += size
72
- return size , err
70
+ n , err := rw .ResponseWriter .Write (b )
71
+ rw .size += n
72
+
73
+ // Flush
74
+ if flusher , ok := rw .ResponseWriter .(http.Flusher ); ok {
75
+ flusher .Flush ()
76
+ }
77
+
78
+ // Return bytes written and any error encountered
79
+ return n , err
73
80
}
74
81
75
82
// ReadFrom exposes underlying http.ResponseWriter to io.Copy and if it implements
76
83
// io.ReaderFrom, it can take advantage of optimizations such as sendfile, io.Copy
77
84
// with sync.Pool's buffer which is in http.(*response).ReadFrom and so on.
78
- func (rw * responseWriter ) ReadFrom (r io.Reader ) (n int64 , err error ) {
85
+ func (rw * responseWriter ) ReadFrom (r io.Reader ) (int64 , error ) {
79
86
if ! rw .Written () {
80
87
// The status will be StatusOK if WriteHeader has not been called yet
81
88
rw .WriteHeader (http .StatusOK )
82
89
}
83
- n , err = io .Copy (rw .ResponseWriter , r )
90
+ n , err : = io .Copy (rw .ResponseWriter , r )
84
91
rw .size += int (n )
85
- return
92
+
93
+ // Flush
94
+ if flusher , ok := rw .ResponseWriter .(http.Flusher ); ok {
95
+ flusher .Flush ()
96
+ }
97
+
98
+ // Return bytes written and any error encountered
99
+ return n , err
86
100
}
87
101
88
102
// Satisfy http.ResponseController support (Go 1.20+)
0 commit comments