fix: proxyHandler — streaming с Flush, 64KB буфер
This commit is contained in:
+23
-2
@@ -320,9 +320,30 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Content-Type", "application/octet-stream")
|
w.Header().Set("Content-Type", "application/octet-stream")
|
||||||
w.Header().Set("Last-Modified", stat.LastModified.Format(http.TimeFormat))
|
w.Header().Set("Last-Modified", stat.LastModified.Format(http.TimeFormat))
|
||||||
|
|
||||||
if _, err := io.Copy(w, obj); err != nil {
|
buf := make([]byte, 64*1024) // 64KB buffer
|
||||||
log.Printf("Error streaming object: %v", err)
|
flusher, canFlush := w.(http.Flusher)
|
||||||
|
written := int64(0)
|
||||||
|
for {
|
||||||
|
n, readErr := obj.Read(buf)
|
||||||
|
if n > 0 {
|
||||||
|
nw, writeErr := w.Write(buf[:n])
|
||||||
|
if writeErr != nil {
|
||||||
|
log.Printf("Error writing response: %v", writeErr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
written += int64(nw)
|
||||||
|
if canFlush {
|
||||||
|
flusher.Flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if readErr != nil {
|
||||||
|
if readErr != io.EOF {
|
||||||
|
log.Printf("Error reading object: %v", readErr)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
log.Printf("Proxy: sent %d/%d bytes for %s", written, stat.Size, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
func discoveryHandler(w http.ResponseWriter, r *http.Request) {
|
func discoveryHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|||||||
Reference in New Issue
Block a user