Roxy Fileman和虚拟目录

问题描述 投票:1回答:2

我有一个包含2个项目的解决方案,其中一个叫做“ admin”,另一个说“ work”(一个Umbraco实例) -工作有一个图片文件夹,其中包含该网站的图片 横幅/缩略图等 -管理员允许管理员用户使用TinyMCE添加带有图像的新故事 和fileman插件。

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

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

那么,如何使该虚拟文件夹与Fileman一起使用?

asp.net-mvc iis tinymce roxy-fileman
2个回答
1
投票

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

我已经通过网站将错误报告给了作者,但是我还发现,如果用SYMLINK替换虚拟目录,一切似乎都可以正常工作。

如果您具有IIS访问权限,则可能具有创建符号链接的命令行访问权限,可以通过以下方式完成:

mklink /j "{virtual location within your website}" "{physical location}"

两个位置均应为完整路径,包括驱动器号,并且“虚拟”位置应位于您的网站根目录中。

到目前为止,我的站点备份开始包括符号链接中的文件,因为我的站点备份将其视为站点内的物理文件夹,所以我没有看到用这种方法而不是虚拟目录来引用文件的问题。现在。

希望对您有帮助!


0
投票

可能在每种情况下都不是一件好事(甚至对于提出这个问题的用户也不是一件好事,但我想我会分享,以防它可能帮助试图将虚拟目录映射到网络共享的人正常工作。我需要修改文件ListDirTree

中的fileman/asp_net/main.ashx函数
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( "]" );
}
© www.soinside.com 2019 - 2024. All rights reserved.