diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index 111cb29bcaeed5e6735a0c7cd33dbdce59f723ef..f54757b4c9070f31f6e95f7c3d655ef560c0a133 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -469,7 +469,9 @@ (define (http-write server client response body)
                                                                       size)
                                                  client))
                        (output   (response-port response)))
-                  (dump-port input output)
+                  (if (file-port? output)
+                      (sendfile output input size)
+                      (dump-port input output))
                   (close-port output)
                   (values)))))
           (lambda args