add support to download directories as zip, tar, targz and tarbz2 #29
parent
63a1a2cd54
commit
3379e6e67c
|
@ -0,0 +1,49 @@
|
||||||
|
package file
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/mholt/archiver"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i *Info) DownloadAs(w http.ResponseWriter, query string) (int, error) {
|
||||||
|
var (
|
||||||
|
extension string
|
||||||
|
temp string
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
temp, err = ioutil.TempDir("", "")
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch query {
|
||||||
|
case "zip":
|
||||||
|
extension, err = ".zip", archiver.Zip.Make(temp+"/temp", []string{i.Path})
|
||||||
|
case "tar":
|
||||||
|
extension, err = ".tar", archiver.Tar.Make(temp+"/temp", []string{i.Path})
|
||||||
|
case "targz":
|
||||||
|
extension, err = ".tar.gz", archiver.TarGz.Make(temp+"/temp", []string{i.Path})
|
||||||
|
case "tarbz2":
|
||||||
|
extension, err = ".tar.bz2", archiver.TarBz2.Make(temp+"/temp", []string{i.Path})
|
||||||
|
default:
|
||||||
|
return http.StatusNotImplemented, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Open(temp + "/temp")
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Disposition", "attachment; filename="+i.Name()+extension)
|
||||||
|
io.Copy(w, file)
|
||||||
|
return http.StatusOK, nil
|
||||||
|
}
|
|
@ -126,6 +126,12 @@ func (f FileManager) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, err
|
||||||
// Generate anti security token.
|
// Generate anti security token.
|
||||||
c.GenerateToken()
|
c.GenerateToken()
|
||||||
|
|
||||||
|
if fi.IsDir() {
|
||||||
|
if val, ok := r.URL.Query()["download"]; ok && val[0] != "" {
|
||||||
|
return fi.DownloadAs(w, val[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !fi.IsDir() {
|
if !fi.IsDir() {
|
||||||
query := r.URL.Query()
|
query := r.URL.Query()
|
||||||
webdav := false
|
webdav := false
|
||||||
|
|
Loading…
Reference in New Issue