leveldb-demo/service/file-service.go

87 lines
1.4 KiB
Go

package service
import (
"errors"
"fmt"
"log"
"os"
"strings"
"github.com/gofrs/uuid"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/opt"
)
var (
storagepath string = "./upload"
)
func init() {
sp := os.Getenv("p")
if sp != "" {
storagepath = sp
}
}
func FileGet(id *string) (*[]byte, error) {
db, err := leveldb.OpenFile(storagepath, nil)
if err != nil {
return nil, err
}
defer db.Close()
ret, err := db.Has([]byte(*id), &opt.ReadOptions{
DontFillCache: false,
Strict: 0,
})
if err != nil {
return nil, errors.New("文件不存在")
}
if !ret {
return nil, errors.New("文件不存在")
}
val, err := db.Get([]byte(*id), nil)
if err != nil {
return nil, err
}
return &val, nil
}
func FileUpload(payload *[]byte) (*string, error) {
db, err := leveldb.OpenFile(storagepath, nil)
if err != nil {
return nil, err
}
defer db.Close()
key := strings.ReplaceAll(uuid.Must(uuid.NewV6()).String(), "-", "")
if err := db.Put([]byte(key), *payload, nil); err != nil {
return nil, err
}
return &key, nil
}
func FileUpdate() {
db, err := leveldb.OpenFile(storagepath, nil)
if err != nil {
return
}
defer db.Close()
ret, err := db.Has([]byte("hello 49"), &opt.ReadOptions{
DontFillCache: false,
Strict: 0,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(ret)
val, err := db.Get([]byte("hello 4"), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(val))
}