diff --git a/server/server.go b/server/server.go index f4f8000..ea8040d 100644 --- a/server/server.go +++ b/server/server.go @@ -166,17 +166,19 @@ func handleArtistAlbumPage(w http.ResponseWriter, req *http.Request) { if musicindex.ArtistExists(artist) { album, ok := musicindex.FindArtist(artist).Albums[albumName] if ok { - contents, err := os.ReadFile(album.Tarball) - + f, err := os.Open(album.Tarball) if err != nil { - http.Error(w, err.Error(), http.StatusNotFound) + http.Error(w, "internal server error: " + err.Error(), + http.StatusInternalServerError) return } + defer f.Close() + w.Header().Set("Content-Disposition", `attachment; filename="` + strings.ReplaceAll(album.Name, `"`, `'`) + `.tar.gz"`) w.Header().Set("Content-Length", fmt.Sprintf("%d", album.TarballSize)) - w.Write(contents) + util.DoChunks(f, 4 * 1024, func (buf []byte) { w.Write(buf) }) return } }