From d65991150f3778842afd3b6fadf0950aa58f57f5 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 2 Feb 2014 20:58:57 -0800 Subject: [PATCH] show listing of zip files --- foobar/test.zip | Bin 0 -> 18727 bytes server-routes.rkt | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 foobar/test.zip diff --git a/foobar/test.zip b/foobar/test.zip new file mode 100644 index 0000000000000000000000000000000000000000..6643b9d84a018eaa5016f9aab84d24c57f7b8ea7 GIT binary patch literal 18727 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 . xexpr?) + (define path (->path p)) + (define relative-path (->string (find-relative-path PROJECT_ROOT path))) + (define ziplist (zip-directory-entries (read-zip-directory path))) + `(div + (p "filename =" ,(->string relative-path)) + (p "size = " ,(bytecount->string (file-size path))) + (ul ,@(map (λ(i) `(li ,(~a i))) ziplist)))) + + + (define/contract (make-binary-info-page p) (pathish? . -> . xexpr?) @@ -102,6 +115,7 @@ (cond [((get-ext path) . in? . '("gif" "jpg" "jpeg" "png" "svg")) (handle-image-path path)] + [((get-ext path) . in? . '("zip")) (handle-zip-path path)] [else '(p "We got some other kind of binary file.")])) ;; server routes