我有一个包含2个项目的解决方案,其中一个叫做“ admin”,另一个说“ work”(一个Umbraco实例) -工作有一个图片文件夹,其中包含该网站的图片 横幅/缩略图等 -管理员允许管理员用户使用TinyMCE添加带有图像的新故事 和fileman插件。
因此,在IIS中,我在Admin中创建了一个虚拟文件夹,该文件夹指向工作中的images文件夹,但是当我尝试在fileman中浏览该文件夹时,它会重复很多子目录并且不显示任何图像。并且我也无法上传任何图像,这只是给我一个错误。conf.json文件中的Files_Root条目如下。
"FILES_ROOT": ".//images//",
那么,如何使该虚拟文件夹与Fileman一起使用?
我也偶然发现了这个问题-当FILES_ROOT指向IIS中的虚拟文件夹时,当试图检索文件列表,上载以及其他位置时,Fileman组件会阻塞。当请求引用虚拟目录时,请求未正确传递文件夹位置。如果将网络嗅探器放在网络嗅探器上,则会看到发送到fileman / asp_net / main.ashx的请求以及返回的错误消息“不支持给定路径的格式。”
我已经通过网站将错误报告给了作者,但是我还发现,如果用SYMLINK替换虚拟目录,一切似乎都可以正常工作。
如果您具有IIS访问权限,则可能具有创建符号链接的命令行访问权限,可以通过以下方式完成:
mklink /j "{virtual location within your website}" "{physical location}"
两个位置均应为完整路径,包括驱动器号,并且“虚拟”位置应位于您的网站根目录中。
到目前为止,我的站点备份开始包括符号链接中的文件,因为我的站点备份将其视为站点内的物理文件夹,所以我没有看到用这种方法而不是虚拟目录来引用文件的问题。现在。
希望对您有帮助!
可能在每种情况下都不是一件好事(甚至对于提出这个问题的用户也不是一件好事,但我想我会分享,以防它可能帮助试图将虚拟目录映射到网络共享的人正常工作。我需要修改文件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( "]" );
}