diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -886,9 +886,19 @@ def overridearchivecmd(orig, ui, repo, d
     finally:
         repo.unfiltered().lfstatus = False
 
+def hgwebarchive(orig, web, req, tmpl):
+    web.repo.lfstatus = True
+
+    try:
+        return orig(web, req, tmpl)
+    finally:
+        web.repo.lfstatus = False
+
 def overridearchive(orig, repo, dest, node, kind, decode=True, matchfn=None,
             prefix='', mtime=None, subrepos=None):
-    if not repo.lfstatus:
+    # For some reason setting repo.lfstatus in hgwebarchive only changes the
+    # unfiltered repo's attr, so check that as well.
+    if not repo.lfstatus and not repo.unfiltered().lfstatus:
         return orig(repo, dest, node, kind, decode, matchfn, prefix, mtime,
                     subrepos)
 
diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py
--- a/hgext/largefiles/uisetup.py
+++ b/hgext/largefiles/uisetup.py
@@ -119,6 +119,8 @@ def uisetup(ui):
     extensions.wrapfunction(archival, 'archive', overrides.overridearchive)
     extensions.wrapfunction(subrepo.hgsubrepo, 'archive',
                             overrides.hgsubrepoarchive)
+    extensions.wrapfunction(webcommands, 'archive',
+                            overrides.hgwebarchive)
     extensions.wrapfunction(cmdutil, 'bailifchanged',
                             overrides.overridebailifchanged)
 
diff --git a/tests/test-largefiles-wireproto.t b/tests/test-largefiles-wireproto.t
--- a/tests/test-largefiles-wireproto.t
+++ b/tests/test-largefiles-wireproto.t
@@ -15,6 +15,8 @@ of largefiles.
   > minsize=2
   > patterns=glob:**.dat
   > usercache=${USERCACHE}
+  > [web]
+  > allow_archive = zip
   > [hooks]
   > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
   > EOF
@@ -215,6 +217,17 @@ Clone over http, no largefiles pulled on
   adding file changes
   added 1 changesets with 1 changes to 1 files
 
+Archive contains largefiles
+  >>> import urllib2, os
+  >>> u = 'http://localhost:%s/archive/default.zip' % os.environ['HGPORT2']
+  >>> with open('archive.zip', 'w') as f:
+  ...     f.write(urllib2.urlopen(u).read())
+  $ unzip -t archive.zip
+  Archive:  archive.zip
+      testing: empty-default/.hg_archival.txt   OK
+      testing: empty-default/f1         OK
+  No errors detected in compressed data of archive.zip.
+
 test 'verify' with remotestore:
 
   $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90