diff --git a/weed/command/webdav.go b/weed/command/webdav.go index ea19ad1a7..987fc388e 100644 --- a/weed/command/webdav.go +++ b/weed/command/webdav.go @@ -13,7 +13,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/security" - "github.com/seaweedfs/seaweedfs/weed/server" + weed_server "github.com/seaweedfs/seaweedfs/weed/server" "github.com/seaweedfs/seaweedfs/weed/util" ) @@ -23,6 +23,7 @@ var ( type WebDavOption struct { filer *string + filerRootPath *string port *int collection *string replication *string @@ -44,6 +45,7 @@ func init() { webDavStandaloneOptions.tlsCertificate = cmdWebDav.Flag.String("cert.file", "", "path to the TLS certificate file") webDavStandaloneOptions.cacheDir = cmdWebDav.Flag.String("cacheDir", os.TempDir(), "local cache directory for file chunks") webDavStandaloneOptions.cacheSizeMB = cmdWebDav.Flag.Int64("cacheCapacityMB", 0, "local cache capacity in MB") + webDavStandaloneOptions.filerRootPath = cmdWebDav.Flag.String("filer.path", "/", "use this remote path from filer server") } var cmdWebDav = &Command{ @@ -104,6 +106,7 @@ func (wo *WebDavOption) startWebDav() bool { ws, webdavServer_err := weed_server.NewWebDavServer(&weed_server.WebDavOption{ Filer: filerAddress, + FilerRootPath: *wo.filerRootPath, GrpcDialOption: grpcDialOption, Collection: *wo.collection, Replication: *wo.replication, diff --git a/weed/server/webdav_server.go b/weed/server/webdav_server.go index 58c47671f..80b882181 100644 --- a/weed/server/webdav_server.go +++ b/weed/server/webdav_server.go @@ -26,6 +26,7 @@ import ( type WebDavOption struct { Filer pb.ServerAddress + FilerRootPath string DomainName string BucketsPath string GrpcDialOption grpc.DialOption @@ -58,6 +59,11 @@ func NewWebDavServer(option *WebDavOption) (ws *WebDavServer, err error) { fs, _ := NewWebDavFileSystem(option) + // Fix no set filer.path , accessing "/" returns "//" + if option.FilerRootPath == "/" { + option.FilerRootPath = "" + } + ws = &WebDavServer{ option: option, grpcDialOption: security.LoadClientTLS(util.GetViper(), "grpc.filer"), @@ -195,7 +201,8 @@ func (fs *WebDavFileSystem) Mkdir(ctx context.Context, fullDirPath string, perm } func (fs *WebDavFileSystem) OpenFile(ctx context.Context, fullFilePath string, flag int, perm os.FileMode) (webdav.File, error) { - + // Add filer.path + fullFilePath = fs.option.FilerRootPath + fullFilePath glog.V(2).Infof("WebDavFileSystem.OpenFile %v %x", fullFilePath, flag) var err error @@ -367,7 +374,8 @@ func (fs *WebDavFileSystem) stat(ctx context.Context, fullFilePath string) (os.F } func (fs *WebDavFileSystem) Stat(ctx context.Context, name string) (os.FileInfo, error) { - + // Add filer.path + name = fs.option.FilerRootPath + name glog.V(2).Infof("WebDavFileSystem.Stat %v", name) return fs.stat(ctx, name)