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