Skip to content
Permalink
Browse files

Simple filesystem transport

  • Loading branch information...
DarthSim committed Feb 4, 2019
1 parent c6838e5 commit 8870d8dbd185143d98f3272f8e0acda5844dd397
Showing with 45 additions and 5 deletions.
  1. +1 −5 download.go
  2. +44 −0 fs_transport.go
@@ -10,7 +10,6 @@ import (
"io/ioutil"
"net"
"net/http"
"strconv"
"time"

_ "image/gif"
@@ -69,7 +68,7 @@ func initDownloading() {
}

if conf.LocalFileSystemRoot != "" {
transport.RegisterProtocol("local", http.NewFileTransport(http.Dir(conf.LocalFileSystemRoot)))
transport.RegisterProtocol("local", newFsTransport())
}

if conf.S3Enabled {
@@ -126,9 +125,6 @@ func readAndCheckImage(ctx context.Context, res *http.Response) (context.Context

if res.ContentLength > 0 {
contentLength = int(res.ContentLength)
} else {
// ContentLength wasn't set properly, trying to parse the header
contentLength, _ = strconv.Atoi(res.Header.Get("Content-Length"))
}

buf := downloadBufPool.Get(contentLength)
@@ -0,0 +1,44 @@
package main

import (
"fmt"
"net/http"
)

type fsTransport struct {
fs http.Dir
}

func newFsTransport() fsTransport {
return fsTransport{fs: http.Dir(conf.LocalFileSystemRoot)}
}

func (t fsTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
f, err := t.fs.Open(req.URL.Path)

if err != nil {
return nil, err
}

fi, err := f.Stat()
if err != nil {
return nil, err
}

if fi.IsDir() {
return nil, fmt.Errorf("%s is a directory", req.URL.Path)
}

return &http.Response{
Status: "200 OK",
StatusCode: 200,
Proto: "HTTP/1.0",
ProtoMajor: 1,
ProtoMinor: 0,
Header: make(http.Header),
ContentLength: fi.Size(),
Body: f,
Close: true,
Request: req,
}, nil
}

0 comments on commit 8870d8d

Please sign in to comment.
You can’t perform that action at this time.