@@ -393,7 +393,7 @@ func zipHandler(w http.ResponseWriter, r *http.Request) { | |||||
reader, _, _, err := storage.Get(token, filename) | reader, _, _, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
if err.Error() == "The specified key does not exist." { | |||||
if storage.IsNotExist(err) { | |||||
http.Error(w, "File not found", 404) | http.Error(w, "File not found", 404) | ||||
return | return | ||||
} else { | } else { | ||||
@@ -463,7 +463,7 @@ func tarGzHandler(w http.ResponseWriter, r *http.Request) { | |||||
reader, _, contentLength, err := storage.Get(token, filename) | reader, _, contentLength, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
if err.Error() == "The specified key does not exist." { | |||||
if storage.IsNotExist(err) { | |||||
http.Error(w, "File not found", 404) | http.Error(w, "File not found", 404) | ||||
return | return | ||||
} else { | } else { | ||||
@@ -515,7 +515,7 @@ func tarHandler(w http.ResponseWriter, r *http.Request) { | |||||
reader, _, contentLength, err := storage.Get(token, filename) | reader, _, contentLength, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
if err.Error() == "The specified key does not exist." { | |||||
if storage.IsNotExist(err) { | |||||
http.Error(w, "File not found", 404) | http.Error(w, "File not found", 404) | ||||
return | return | ||||
} else { | } else { | ||||
@@ -555,7 +555,7 @@ func getHandler(w http.ResponseWriter, r *http.Request) { | |||||
reader, contentType, contentLength, err := storage.Get(token, filename) | reader, contentType, contentLength, err := storage.Get(token, filename) | ||||
if err != nil { | if err != nil { | ||||
if err.Error() == "The specified key does not exist." { | |||||
if storage.IsNotExist(err) { | |||||
http.Error(w, "File not found", 404) | http.Error(w, "File not found", 404) | ||||
return | return | ||||
} else { | } else { | ||||
@@ -3,7 +3,6 @@ package main | |||||
import ( | import ( | ||||
"bytes" | "bytes" | ||||
"fmt" | "fmt" | ||||
"github.com/goamz/goamz/s3" | |||||
"io" | "io" | ||||
"log" | "log" | ||||
"mime" | "mime" | ||||
@@ -11,12 +10,15 @@ import ( | |||||
"path/filepath" | "path/filepath" | ||||
"strconv" | "strconv" | ||||
"sync" | "sync" | ||||
"github.com/goamz/goamz/s3" | |||||
) | ) | ||||
type Storage interface { | type Storage interface { | ||||
Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) | Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) | ||||
Head(token string, filename string) (contentType string, contentLength uint64, err error) | Head(token string, filename string) (contentType string, contentLength uint64, err error) | ||||
Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error | Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error | ||||
IsNotExist(err error) bool | |||||
} | } | ||||
type LocalStorage struct { | type LocalStorage struct { | ||||
@@ -63,6 +65,10 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, | |||||
return | return | ||||
} | } | ||||
func (s *LocalStorage) IsNotExist(err error) bool { | |||||
return os.IsNotExist(err) | |||||
} | |||||
func (s *LocalStorage) Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error { | func (s *LocalStorage) Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error { | ||||
var f io.WriteCloser | var f io.WriteCloser | ||||
var err error | var err error | ||||
@@ -120,6 +126,14 @@ func (s *S3Storage) Head(token string, filename string) (contentType string, con | |||||
return | return | ||||
} | } | ||||
func (s *S3Storage) IsNotExist(err error) bool { | |||||
log.Printf("IsNotExist: %s, %#v", err.Error(), err) | |||||
b := (err.Error() == "The specified key does not exist.") | |||||
b = b || (err.Error() == "Access Denied") | |||||
return b | |||||
} | |||||
func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) { | ||||
key := fmt.Sprintf("%s/%s", token, filename) | key := fmt.Sprintf("%s/%s", token, filename) | ||||