Asp.net mvc Roxy Fileman和虚拟目录

Asp.net mvc Roxy Fileman和虚拟目录,asp.net-mvc,iis,tinymce,roxy-fileman,Asp.net Mvc,Iis,Tinymce,Roxy Fileman,我有一个包含两个项目的解决方案,一个叫做“admin”,另一个叫做“work”(一个Umbraco实例) -Work有一个图像文件夹,其中包含站点的图像 横幅/图钉等。 -Admin允许管理员用户使用TinyMCE添加带有图像的新故事 和文件管理器插件 因此,在IIS中,我在Admin中创建了一个虚拟文件夹,指向工作中的images文件夹,但是当我尝试在fileman中浏览该文件夹时,它会重复许多子目录,并且不会显示任何图像。我也无法上载任何图像,这只会给我一个错误。 conf.json文件中的

我有一个包含两个项目的解决方案,一个叫做“admin”,另一个叫做“work”(一个Umbraco实例) -Work有一个图像文件夹,其中包含站点的图像 横幅/图钉等。 -Admin允许管理员用户使用TinyMCE添加带有图像的新故事
和文件管理器插件

因此,在IIS中,我在Admin中创建了一个虚拟文件夹,指向工作中的images文件夹,但是当我尝试在fileman中浏览该文件夹时,它会重复许多子目录,并且不会显示任何图像。我也无法上载任何图像,这只会给我一个错误。 conf.json文件中的Files\u Root条目如下所示

    "FILES_ROOT":          ".//images//",

那么如何让这个虚拟文件夹与fileman一起工作呢

我也偶然发现了这个问题-当FILES\u ROOT指向IIS中的虚拟文件夹时,Fileman组件在尝试检索文件列表、上载以及其他一些地方时会阻塞。当文件夹引用虚拟目录时,请求无法正确传递文件夹位置。如果在其上放置网络嗅探器,您将看到发送到fileman/asp_net/main.ashx的请求以及返回错误“给定路径的格式不受支持”的响应

我已经通过网站向作者报告了这个bug,但我还发现,如果用符号链接替换虚拟目录,一切似乎都正常

如果您具有IIS访问权限,则可能具有创建符号链接的命令行访问权限,具体操作如下:

mklink /j "{virtual location within your website}" "{physical location}"
这两个位置都应该是完整路径,包括驱动器号,“虚拟”位置应该位于网站根目录中

到目前为止,我没有发现以这种方式而不是使用虚拟目录引用文件的问题,除了我的站点备份开始时将文件包括在符号链接中,因为O/S现在将其视为站点中的物理文件夹


我希望这有帮助

可能不适合每种情况(甚至可能不适合提出问题的用户),但我想我会分享,以防有人试图让映射到网络共享的虚拟目录正常工作。我需要修改文件
fileman/asp\u net/main.ashx中的
listdiretree
函数

protected void ListDirTree(string type)
{
    string filesRoot = GetFilesRoot();
    DirectoryInfo d = new DirectoryInfo( filesRoot );
    if ( !d.Exists )
        throw new Exception( "Invalid files root directory. Check your configuration: " + filesRoot );

    ArrayList dirs = ListDirs( d.FullName );
    dirs.Insert( 0, d.FullName );

    string localPath = _context.Server.MapPath( "~/" );
    bool isLocal = filesRoot.Contains( ":" );
    _r.Write( "[" );
    for ( int i = 0; i < dirs.Count; i++ )
    {
        string dir = (string)dirs[i];
        string lPath;
        //If it is a local path, leave it as it was
        if ( isLocal )
            lPath = dir.Replace( localPath, "" ).Replace( "\\", "/" );
        else
            //Otherwise probably a virtual directory, put the original files_root location back
            lPath = dir.Replace( filesRoot, GetSetting( "FILES_ROOT" ) ).Replace( "\\", "/" );
        _r.Write( "{\"p\":\"/" + lPath + "\",\"f\":\"" + GetFiles( dir, type ).Count.ToString() + "\",\"d\":\"" + Directory.GetDirectories( dir ).Length.ToString() + "\"}" );
        if ( i < dirs.Count - 1 )
            _r.Write( "," );
    }
    _r.Write( "]" );
}
受保护的无效列表目录树(字符串类型)
{
字符串fileroot=getfileroot();
DirectoryInfo d=新的DirectoryInfo(fileroot);
如果(!d.Exists)
抛出新异常(“无效的文件根目录。请检查您的配置:“+filesRoot”);
ArrayList-dirs=ListDirs(d.FullName);
目录插入(0,d.全名);
字符串localPath=\u context.Server.MapPath(“~/”);
bool isLocal=fileroot.Contains(“:”);
_r、 写(“[”);
对于(int i=0;i
当我尝试此操作时,似乎返回的目录路径是完全限定的,例如,它返回“C:\inetpub\…”等。它返回的是我设置符号链接的目录。关于我做错了什么,有什么线索吗?你也不能创建指向网络共享的符号链接,所以如果你的虚拟目录指向文件服务器/网络路径,那么这将不起作用。