正如标题所示,我试图从Web上传文件到我的Sitecore树中的某个地方,并且希望将该文件的扩展名保留在该项目的DisplayName中。将文件上传到Sitecore,在DisplayName中保留扩展名
我试过使用MediaCreator,但它需要一个特定的文件路径,我不知道什么时候让人们使用asp选择一个文件:FileUpload。所以这不好。
我现在使用asp:FileUpload与流水线结合使用。当我使用Sitecore.Kernel中的Sitecore.Pipelines.Upload.Save时,它将工作,除了它从DisplayName中删除文件的扩展名。所以,我创建了一个自定义管道的方法,看起来像这样:
using System;
using System.IO;
using Sitecore.Diagnostics;
using Sitecore.IO;
namespace Sitecore.Pipelines.Upload
{
public class CustomSave
{
public void Process(UploadArgs args)
{
foreach (string key in args.Files)
{
var file = args.Files[key];
if (file != null && file.FileName.Length > 0 && file.ContentLength > 0)
{
var filename = FileUtil.MakePath(args.Folder, Path.GetFileName(file.FileName), '/');
try
{
if (!args.Overwrite)
{
filename = FileUtil.GetUniqueFilename(filename);
}
file.SaveAs(filename);
EventDispatcher.DispatchTrace("File has been uploaded: " + filename);
}
catch (Exception ex)
{
Log.Error("Could not save posted file: " + filename, ex, this);
}
}
}
}
}
}
我现在面临的问题是,它正试图保存到我的C:\盘而不是Sitecore的数据库。
关于如何写入正确目的地的任何建议?
如上所述,最终目标是使用客户端友好的asp:FileUpload来选择文件并将其上载到Sitecore中的特定路径,从而在其DisplayName中保留该文件的扩展名。如果你有另一种方式做,我也想听到。
我不能使用媒体,因为它需要我没有的文件路径。我正在考虑的另一个想法。我感到困惑,试图改变Item.DisplayName但它没有setter。变成Item.Name作品。谢谢。 –
如果您使用Item.Name来添加扩展名,那么只需使用该设置即可。它会自动为你做。 – ishara