瀏覽代碼

improved error handlig for not existing files

tags/v1.0.0
Remco 8 年之前
父節點
當前提交
1b562e1db0
共有 2 個檔案被更改,包括 19 行新增5 行删除
  1. +4
    -4
      transfersh-server/handlers.go
  2. +15
    -1
      transfersh-server/storage.go

+ 4
- 4
transfersh-server/handlers.go 查看文件

@@ -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 {


+ 15
- 1
transfersh-server/storage.go 查看文件

@@ -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)




Loading…
取消
儲存