feat: add file info and update list response
This commit is contained in:
parent
fc2cf48f65
commit
fcb1689bb8
8
Makefile
8
Makefile
@ -11,8 +11,6 @@ LDFLAGS := -X 'gosvc.setVersionNumber=$(VERSION)' \
|
||||
UNAME_S := $(shell uname -s)
|
||||
|
||||
BINARY_NAME := robotfs
|
||||
BINARY_MAC := $(BINARY_NAME)-darwin
|
||||
BINARY_LINUX := $(BINARY_NAME)-linux
|
||||
|
||||
.PHONY: all
|
||||
all: proto build
|
||||
@ -26,15 +24,15 @@ proto:
|
||||
build:
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
@echo "Building for MacOS..."
|
||||
GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BINARY_MAC) ./
|
||||
GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BINARY_NAME) ./
|
||||
else
|
||||
@echo "Building for Linux..."
|
||||
GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BINARY_LINUX) ./
|
||||
GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(BINARY_NAME) ./
|
||||
endif
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(BINARY_NAME) $(BINARY_MAC) $(BINARY_LINUX)
|
||||
rm -f $(BINARY_NAME)
|
||||
rm -f pb/*.pb.go
|
||||
|
||||
.PHONY: help
|
||||
|
||||
@ -12,6 +12,10 @@ import (
|
||||
type Entry struct {
|
||||
Name string `json:"name"`
|
||||
IsDir bool `json:"is_dir"`
|
||||
Size uint64 `json:"size"`
|
||||
ContentType string `json:"content_type"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
S3Key string `json:"s3key"`
|
||||
}
|
||||
|
||||
type ListResult struct {
|
||||
@ -81,6 +85,10 @@ func (s *Service) HandleListDirectory(
|
||||
entries[i] = Entry{
|
||||
Name: e.FullPath.Name(),
|
||||
IsDir: e.IsDir,
|
||||
Size: e.Size,
|
||||
ContentType: e.ContentType,
|
||||
CreateTime: e.CreateTime,
|
||||
S3Key: e.S3Key,
|
||||
}
|
||||
}
|
||||
result.Entries = entries
|
||||
|
||||
11
api_file.go
11
api_file.go
@ -71,7 +71,16 @@ func (s *Service) HandleInfoFile(
|
||||
req *httpserver.Request,
|
||||
resp *httpserver.Response,
|
||||
) *httpserver.Response {
|
||||
return resp.NoContent()
|
||||
path := req.QueryString("path")
|
||||
newPath := utils.NormalizePath(path)
|
||||
|
||||
entry, err := s.FileSystemManager.FindEntry(req.Context(), utils.FullPath(newPath))
|
||||
if err != nil {
|
||||
logger.Error("info %s: %v", path, err)
|
||||
return resp.InternalServerError("info file failed, " + err.Error())
|
||||
}
|
||||
|
||||
return resp.OK(entry).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleDownloadFile(
|
||||
|
||||
@ -1,212 +0,0 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.36.6
|
||||
// protoc v5.29.3
|
||||
// source: pb/metadata.proto
|
||||
|
||||
package pb
|
||||
|
||||
import (
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
unsafe "unsafe"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type FileEntry struct {
|
||||
state protoimpl.MessageState `protogen:"open.v1"`
|
||||
FullPath string `protobuf:"bytes,1,opt,name=full_path,json=fullPath,proto3" json:"full_path,omitempty"`
|
||||
IsDir bool `protobuf:"varint,2,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
|
||||
Size uint64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
|
||||
CreateTime int64 `protobuf:"varint,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
|
||||
S3Key string `protobuf:"bytes,5,opt,name=s3_key,json=s3Key,proto3" json:"s3_key,omitempty"`
|
||||
ContentType string `protobuf:"bytes,6,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
|
||||
Etag string `protobuf:"bytes,7,opt,name=etag,proto3" json:"etag,omitempty"`
|
||||
VersionId string `protobuf:"bytes,8,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
|
||||
LastModificationTime int64 `protobuf:"varint,9,opt,name=last_modification_time,json=lastModificationTime,proto3" json:"last_modification_time,omitempty"`
|
||||
Extended map[string][]byte `protobuf:"bytes,10,rep,name=extended,proto3" json:"extended,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
||||
unknownFields protoimpl.UnknownFields
|
||||
sizeCache protoimpl.SizeCache
|
||||
}
|
||||
|
||||
func (x *FileEntry) Reset() {
|
||||
*x = FileEntry{}
|
||||
mi := &file_pb_metadata_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
|
||||
func (x *FileEntry) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*FileEntry) ProtoMessage() {}
|
||||
|
||||
func (x *FileEntry) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pb_metadata_proto_msgTypes[0]
|
||||
if x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use FileEntry.ProtoReflect.Descriptor instead.
|
||||
func (*FileEntry) Descriptor() ([]byte, []int) {
|
||||
return file_pb_metadata_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetFullPath() string {
|
||||
if x != nil {
|
||||
return x.FullPath
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetIsDir() bool {
|
||||
if x != nil {
|
||||
return x.IsDir
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetSize() uint64 {
|
||||
if x != nil {
|
||||
return x.Size
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetCreateTime() int64 {
|
||||
if x != nil {
|
||||
return x.CreateTime
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetS3Key() string {
|
||||
if x != nil {
|
||||
return x.S3Key
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetContentType() string {
|
||||
if x != nil {
|
||||
return x.ContentType
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetEtag() string {
|
||||
if x != nil {
|
||||
return x.Etag
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetVersionId() string {
|
||||
if x != nil {
|
||||
return x.VersionId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetLastModificationTime() int64 {
|
||||
if x != nil {
|
||||
return x.LastModificationTime
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *FileEntry) GetExtended() map[string][]byte {
|
||||
if x != nil {
|
||||
return x.Extended
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_pb_metadata_proto protoreflect.FileDescriptor
|
||||
|
||||
const file_pb_metadata_proto_rawDesc = "" +
|
||||
"\n" +
|
||||
"\x11pb/metadata.proto\x12\arobotfs\"\x92\x03\n" +
|
||||
"\tFileEntry\x12\x1b\n" +
|
||||
"\tfull_path\x18\x01 \x01(\tR\bfullPath\x12\x15\n" +
|
||||
"\x06is_dir\x18\x02 \x01(\bR\x05isDir\x12\x12\n" +
|
||||
"\x04size\x18\x03 \x01(\x04R\x04size\x12\x1f\n" +
|
||||
"\vcreate_time\x18\x04 \x01(\x03R\n" +
|
||||
"createTime\x12\x15\n" +
|
||||
"\x06s3_key\x18\x05 \x01(\tR\x05s3Key\x12!\n" +
|
||||
"\fcontent_type\x18\x06 \x01(\tR\vcontentType\x12\x12\n" +
|
||||
"\x04etag\x18\a \x01(\tR\x04etag\x12\x1d\n" +
|
||||
"\n" +
|
||||
"version_id\x18\b \x01(\tR\tversionId\x124\n" +
|
||||
"\x16last_modification_time\x18\t \x01(\x03R\x14lastModificationTime\x12<\n" +
|
||||
"\bextended\x18\n" +
|
||||
" \x03(\v2 .robotfs.FileEntry.ExtendedEntryR\bextended\x1a;\n" +
|
||||
"\rExtendedEntry\x12\x10\n" +
|
||||
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
|
||||
"\x05value\x18\x02 \x01(\fR\x05value:\x028\x01B\fZ\n" +
|
||||
"robotfs/pbb\x06proto3"
|
||||
|
||||
var (
|
||||
file_pb_metadata_proto_rawDescOnce sync.Once
|
||||
file_pb_metadata_proto_rawDescData []byte
|
||||
)
|
||||
|
||||
func file_pb_metadata_proto_rawDescGZIP() []byte {
|
||||
file_pb_metadata_proto_rawDescOnce.Do(func() {
|
||||
file_pb_metadata_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_pb_metadata_proto_rawDesc), len(file_pb_metadata_proto_rawDesc)))
|
||||
})
|
||||
return file_pb_metadata_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pb_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
||||
var file_pb_metadata_proto_goTypes = []any{
|
||||
(*FileEntry)(nil), // 0: robotfs.FileEntry
|
||||
nil, // 1: robotfs.FileEntry.ExtendedEntry
|
||||
}
|
||||
var file_pb_metadata_proto_depIdxs = []int32{
|
||||
1, // 0: robotfs.FileEntry.extended:type_name -> robotfs.FileEntry.ExtendedEntry
|
||||
1, // [1:1] is the sub-list for method output_type
|
||||
1, // [1:1] is the sub-list for method input_type
|
||||
1, // [1:1] is the sub-list for extension type_name
|
||||
1, // [1:1] is the sub-list for extension extendee
|
||||
0, // [0:1] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pb_metadata_proto_init() }
|
||||
func file_pb_metadata_proto_init() {
|
||||
if File_pb_metadata_proto != nil {
|
||||
return
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: unsafe.Slice(unsafe.StringData(file_pb_metadata_proto_rawDesc), len(file_pb_metadata_proto_rawDesc)),
|
||||
NumEnums: 0,
|
||||
NumMessages: 2,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pb_metadata_proto_goTypes,
|
||||
DependencyIndexes: file_pb_metadata_proto_depIdxs,
|
||||
MessageInfos: file_pb_metadata_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pb_metadata_proto = out.File
|
||||
file_pb_metadata_proto_goTypes = nil
|
||||
file_pb_metadata_proto_depIdxs = nil
|
||||
}
|
||||
@ -83,7 +83,7 @@ func (s *Service) RegisterRouteRules() {
|
||||
},
|
||||
},
|
||||
{
|
||||
Path: "/info",
|
||||
Path: "/file/info",
|
||||
Method: http.MethodGet,
|
||||
Handler: s.HandleInfoFile,
|
||||
QueryRules: []*httpserver.QueryRule{
|
||||
|
||||
@ -10,16 +10,16 @@ import (
|
||||
)
|
||||
|
||||
type Entry struct {
|
||||
FullPath FullPath
|
||||
IsDir bool
|
||||
Size uint64
|
||||
CreateTime int64
|
||||
S3Key string
|
||||
ContentType string
|
||||
Etag string
|
||||
VersionID string
|
||||
LastModificationTime int64
|
||||
Extended map[string][]byte
|
||||
FullPath FullPath `json:"fullPath"`
|
||||
IsDir bool `json:"is_dir"`
|
||||
Size uint64 `json:"size"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
S3Key string `json:"s3key"`
|
||||
ContentType string `json:"content_type"`
|
||||
Etag string `json:"etag"`
|
||||
VersionID string `json:"versionID"`
|
||||
LastModificationTime int64 `json:"modify_time"`
|
||||
Extended map[string][]byte `json:"extended"`
|
||||
}
|
||||
|
||||
func NewDirEntry(fullPath FullPath) *Entry {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user