diff options
Diffstat (limited to 'routers/repo/download.go')
-rw-r--r-- | routers/repo/download.go | 78 |
1 files changed, 9 insertions, 69 deletions
diff --git a/routers/repo/download.go b/routers/repo/download.go index 7e20b0e0..abb9b062 100644 --- a/routers/repo/download.go +++ b/routers/repo/download.go @@ -6,24 +6,18 @@ package repo import ( "io" - "os" - "path/filepath" - - "github.com/Unknwon/com" - "github.com/go-martini/martini" - - "github.com/gogits/git" + "path" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware" ) -func SingleDownload(ctx *middleware.Context, params martini.Params) { - treename := params["_1"] +func SingleDownload(ctx *middleware.Context) { + treename := ctx.Params("*") blob, err := ctx.Repo.Commit.GetBlobByPath(treename) if err != nil { - ctx.Handle(500, "repo.SingleDownload(GetBlobByPath)", err) + ctx.Handle(500, "GetBlobByPath", err) return } @@ -39,67 +33,13 @@ func SingleDownload(ctx *middleware.Context, params martini.Params) { buf = buf[:n] } - defer func() { - dataRc.Close() - }() - contentType, isTextFile := base.IsTextFile(buf) _, isImageFile := base.IsImageFile(buf) - ctx.Res.Header().Set("Content-Type", contentType) + ctx.Resp.Header().Set("Content-Type", contentType) if !isTextFile && !isImageFile { - ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+filepath.Base(treename)) - ctx.Res.Header().Set("Content-Transfer-Encoding", "binary") - } - ctx.Res.Write(buf) - io.Copy(ctx.Res, dataRc) -} - -func ZipDownload(ctx *middleware.Context, params martini.Params) { - commitId := ctx.Repo.CommitId - archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/zip") - if !com.IsDir(archivesPath) { - if err := os.MkdirAll(archivesPath, 0755); err != nil { - ctx.Handle(500, "ZipDownload -> os.Mkdir(archivesPath)", err) - return - } - } - - archivePath := filepath.Join(archivesPath, commitId+".zip") - - if com.IsFile(archivePath) { - ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+".zip") - return - } - - if err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_ZIP); err != nil { - ctx.Handle(500, "ZipDownload -> CreateArchive "+archivePath, err) - return + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(treename)) + ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") } - - ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+".zip") -} - -func TarGzDownload(ctx *middleware.Context, params martini.Params) { - commitId := ctx.Repo.CommitId - archivesPath := filepath.Join(ctx.Repo.GitRepo.Path, "archives/targz") - if !com.IsDir(archivesPath) { - if err := os.MkdirAll(archivesPath, 0755); err != nil { - ctx.Handle(500, "TarGzDownload -> os.Mkdir(archivesPath)", err) - return - } - } - - archivePath := filepath.Join(archivesPath, commitId+".tar.gz") - - if com.IsFile(archivePath) { - ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+".tar.gz") - return - } - - if err := ctx.Repo.Commit.CreateArchive(archivePath, git.AT_TARGZ); err != nil { - ctx.Handle(500, "TarGzDownload -> CreateArchive "+archivePath, err) - return - } - - ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+".tar.gz") + ctx.Resp.Write(buf) + io.Copy(ctx.Resp, dataRc) } |