mirror of https://github.com/Xhofe/alist
				
				
				
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			878 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			878 B
		
	
	
	
		
			Go
		
	
	
| package webdav
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| )
 | |
| 
 | |
| type bufferedResponseWriter struct {
 | |
| 	statusCode int
 | |
| 	data       []byte
 | |
| 	header     http.Header
 | |
| }
 | |
| 
 | |
| func (w *bufferedResponseWriter) Header() http.Header {
 | |
| 	if w.header == nil {
 | |
| 		w.header = make(http.Header)
 | |
| 	}
 | |
| 	return w.header
 | |
| }
 | |
| 
 | |
| func (w *bufferedResponseWriter) Write(bytes []byte) (int, error) {
 | |
| 	w.data = append(w.data, bytes...)
 | |
| 	return len(bytes), nil
 | |
| }
 | |
| 
 | |
| func (w *bufferedResponseWriter) WriteHeader(statusCode int) {
 | |
| 	if w.statusCode == 0 {
 | |
| 		w.statusCode = statusCode
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (w *bufferedResponseWriter) WriteToResponse(rw http.ResponseWriter) (int, error) {
 | |
| 	h := rw.Header()
 | |
| 	for k, vs := range w.header {
 | |
| 		for _, v := range vs {
 | |
| 			h.Add(k, v)
 | |
| 		}
 | |
| 	}
 | |
| 	rw.WriteHeader(w.statusCode)
 | |
| 	return rw.Write(w.data)
 | |
| }
 | |
| 
 | |
| func newBufferedResponseWriter() *bufferedResponseWriter {
 | |
| 	return &bufferedResponseWriter{
 | |
| 		statusCode: 0,
 | |
| 	}
 | |
| }
 |