Orchardcms Orchard-设置特殊媒体文件夹
我需要将jPlayer目录设置为一个名为“/Default/MediaGallery”而不是“/MyFolder/CurrentMedia/”的文件夹 请问,有人能帮我找到一种方法来更改jPlayer-Version:1.0.1中的设置吗 “问候”看起来像名字。无法摆脱路径的“/Default”部分,因为jPlayer模块正在使用Orchard媒体功能,该功能有一个默认根文件夹,以每个租户的名字命名(这是一个多租户友好的模块)。Orchardcms Orchard-设置特殊媒体文件夹,orchardcms,jplayer,Orchardcms,Jplayer,我需要将jPlayer目录设置为一个名为“/Default/MediaGallery”而不是“/MyFolder/CurrentMedia/”的文件夹 请问,有人能帮我找到一种方法来更改jPlayer-Version:1.0.1中的设置吗 “问候”看起来像名字。无法摆脱路径的“/Default”部分,因为jPlayer模块正在使用Orchard媒体功能,该功能有一个默认根文件夹,以每个租户的名字命名(这是一个多租户友好的模块)。 通过更改上面链接的文件第12行中的名称(MediaGallerie
通过更改上面链接的文件第12行中的名称(MediaGalleries),您只能更改该路径的以下部分。@PiotrSzmyd是正确的,部分是硬编码的。“默认值”来自
Orchard.Web\App\u Data\Sites\Default\Settings.txt中的Name
字段,路径在Orchard\FileSystems\Media\FileSystemStorageProvider.cs
中硬编码。遗憾的是,无法通过处理程序或其他方式改变此类的行为。现在有两种选择
更改Orchard的源代码
通过添加一个模块来解决此问题,该模块提供了IStorageProvider
的自定义实现,并在需要时(意味着媒体存储路径在Orchard目录结构之外)添加一个额外的MVC控制器来为媒体文件提供服务
我使用第二个选项将媒体存储路径更改为\\\Files$\\media
首先,这里是IStorageProvider
的基本部分:
自定义IStorageProvider
实现
[Orchard.Environment.Extensions.OrchardSuppressDependency("Orchard.FileSystems.Media.FileSystemStorageProvider")] // adopted from AzureBlobStorageProvider.cs
public class FileSystemStorageProvider : Orchard.FileSystems.Media.IStorageProvider
{
private Orchard.FileSystems.Media.FileSystemStorageProvider mFileSystemStorageProvider;
public FileSystemStorageProvider(Orchard.Environment.Configuration.ShellSettings settings)
{
// use Orchard's default IStorageProvider for implementation
mFileSystemStorageProvider = new Orchard.FileSystems.Media.FileSystemStorageProvider(settings);
var lFileSystemStorageProviderType = mFileSystemStorageProvider.GetType();
// get media storage path, e.g. from configuration file
var lStoragePath = GetMediaStoragePath();
lStoragePath = System.IO.Path.Combine(lStoragePath, settings.Name);
// _storagePath is private read-only, so change it the hard way by using reflection
lFileSystemStorageProviderType
.GetField("_storagePath", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(mFileSystemStorageProvider, lStoragePath);
string lVirtualPath = "~/Files/" + settings.Name + "/";
lFileSystemStorageProviderType
.GetField("_virtualPath", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(mFileSystemStorageProvider, lVirtualPath);
string lPublicPath = mFileSystemStorageProvider.GetPublicUrl(null).Replace("/Media/" + settings.Name + "/", "/Files/" + settings.Name + "/");
lFileSystemStorageProviderType
.GetField("_publicPath", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(mFileSystemStorageProvider, lPublicPath);
}
#region Implementation of IStorageProvider
public bool FileExists(string aPath)
{
return mFileSystemStorageProvider.FileExists(aPath);
}
...
#endregion
}
此自定义实现映射
\\\Files$\\媒体的存储路径
~/Files/Default/
/Files/Default/
现在有个问题。Orchard将媒体URL呈现为www.mysite.de/Files/Default…
,但Orchard目录结构中没有名为Files的目录。现在,自定义路线开始发挥作用
自定义路线
public class Routes : Orchard.Mvc.Routes.IRouteProvider
{
public System.Collections.Generic.IEnumerable<Orchard.Mvc.Routes.RouteDescriptor> GetRoutes()
{
Orchard.Mvc.Routes.RouteDescriptor[] lRoutes =
new Orchard.Mvc.Routes.RouteDescriptor[]
{
new Orchard.Mvc.Routes.RouteDescriptor()
{
Name = "Custom route for media files",
Priority = 10000,
Route = new System.Web.Routing.Route(
"Files/{*aRelativePath}",
new System.Web.Routing.RouteValueDictionary()
{
{"area", "MyModule"},
{"controller", "Media"},
{"action", "GetFile"}
},
new System.Web.Routing.RouteValueDictionary() {},
new System.Web.Routing.RouteValueDictionary() { {"area", "MyModule"} },
new System.Web.Mvc.MvcRouteHandler()
)
}
};
return lRoutes;
}
public void GetRoutes(System.Collections.Generic.ICollection<Orchard.Mvc.Routes.RouteDescriptor> arRoutes)
{
foreach (var lRouteDescriptor in GetRoutes())
arRoutes.Add(lRouteDescriptor);
}
}
哇,这是jPlayer的旧版本…我在Orchard中没有jPlayer可见的更新。如果我把Orchard CMS本身升级到一个更高的小版本,其他一些东西就不能像导航一样工作了。我希望你能以任何方式回答我的问题?嗯,在jPlayer中没有设置“媒体库文件夹”的选项。。这纯粹是果园问题。。对不起,我不能帮你做果园。
public class MediaController
{
public MediaController(Orchard.FileSystems.Media.IMimeTypeProvider aMimeTypeProvider)
{
mMimeTypeProvider = aMimeTypeProvider;
}
public System.Web.Mvc.ActionResult GetFile(string aRelativePath)
{
string lMediaStoragePath, lErrorMessage;
// get media storage path, e.g. from configuration file
if (GetMediaStoragePath(out lMediaStoragePath, out lErrorMessage))
{
string lFilename = System.IO.Path.Combine(lMediaStoragePath, aRelativePath);
string lMimeType = mMimeTypeProvider.GetMimeType(lFilename);
return File(lFilename, lMimeType);
}
else
return Content(lErrorMessage);
}
// private
private Orchard.FileSystems.Media.IMimeTypeProvider mMimeTypeProvider;
}