diff --git a/seadb_test.go b/seadb_test.go index 042dd15..4d79b09 100644 --- a/seadb_test.go +++ b/seadb_test.go @@ -1,6 +1,8 @@ package pic import ( + "os" + "path/filepath" "strings" "testing" @@ -19,6 +21,13 @@ func openDB() *sqlx.DB { return db } +// создадим временный каталог для тестирования +func TestMain(m *testing.M) { + os.RemoveAll("test") + os.Mkdir("test", 0666) + os.Exit(m.Run()) +} + func TestGetSmallGifs(t *testing.T) { seadb, err := NewSeaDB(db) // если ошибка - дальнейшая проверка бессмыслена @@ -34,4 +43,13 @@ func TestGetSmallGifs(t *testing.T) { assert.Equal(t, strings.HasPrefix(u, "http://192.168.0.105:9091/"), true, "должен начинаться с http://192.168.0.105:9091/") assert.Equal(t, strings.HasSuffix(u, ".gif"), true, "должен заканчиваться на .gif") } + + // проверим загрузку + url := urls[1] + // fid := baseName() + filename, err := getFilename(url) + assert.Nil(t, err) + + err = download(url, filepath.Join("test", filename)) + assert.Nil(t, err) } diff --git a/test/23441c89622148.gif b/test/23441c89622148.gif new file mode 100644 index 0000000..8714d0e Binary files /dev/null and b/test/23441c89622148.gif differ diff --git a/weed.go b/weed.go index 92e48fc..61b6d72 100644 --- a/weed.go +++ b/weed.go @@ -1,10 +1,14 @@ package pic import ( + "fmt" + "io" + "io/ioutil" "net/http" - "time" + "os" "strings" - "fmt" + "time" + //"log" "github.com/linxGnu/goseaweedfs" ) @@ -46,10 +50,44 @@ func delete(url string) error { return err } +// загружает файл из weed в filename +func download(url string, filename string) error { + fid, err := getFID(url) + if err != nil { + return err + } + + _, err = sw.Download(fid, nil, func(r io.Reader) (err error) { + data, err := ioutil.ReadAll(r) + if err != nil { + return err + } + file, err := os.OpenFile(filename, os.O_CREATE, 0666) + if err != nil { + return err + } + _, err = file.Write(data) + file.Close() + return + }) + + return err +} + func getFID(url string) (string, error) { items := strings.Split(url, "/") - if len(items) != 2 { - return "", fmt.Errorf("url должен быть в формате:
") + if len(items) < 2 { + return "", fmt.Errorf("url должен быть в формате: ") + } + return items[len(items)-1], nil +} + +func getFilename(url string) (string, error) { + fn, err := getFID(url) + if err != nil { + return "", err } + + items := strings.Split(fn, ",") return items[len(items)-1], nil } diff --git a/weed_test.go b/weed_test.go index 91bac7b..25c2e3d 100644 --- a/weed_test.go +++ b/weed_test.go @@ -3,15 +3,15 @@ package pic import ( //"log" "testing" + "github.com/stretchr/testify/assert" ) func TestUpload(t *testing.T) { - url, err := upload("weed_test.go") + url, err := upload("weed_test.go") assert.Nil(t, err) //log.Printf("url: %s\n", url) - // проверка на обработку ошибок (перепутал url и fid) err = delete("4,23456") assert.NotNil(t, err) @@ -20,3 +20,15 @@ func TestUpload(t *testing.T) { err = delete(url) assert.Nil(t, err) } + +func TestGetFID(t *testing.T) { + fn, err := getFID("http://192.168.0.105:9091/6,23441c89622148.gif") + assert.Nil(t, err) + assert.Equal(t, fn, "6,23441c89622148.gif", "должны совпадать") +} + +func TestGetFilename(t *testing.T) { + fn, err := getFilename("http://192.168.0.105:9091/6,23441c89622148.gif") + assert.Nil(t, err) + assert.Equal(t, fn, "23441c89622148.gif", "должны совпадать") +}