2014-01-17 54 views
0

正如标题所示,我试图从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中保留该文件的扩展名。如果你有另一种方式做,我也想听到。

回答

1

有一种设置,将文件扩展名附加到项目名称 “Media.IncludeExtensionsInItemNames”。如果你能忍受这一点,只需打开它。

否则,我会在“保存”一个后在“uiUpload”中添加一个自定义处理器。那时你已经有了一个来自“args.UploadedItems”的创建媒体项目列表。你可以使用那里的物品做简单的操作。

+0

我不能使用媒体,因为它需要我没有的文件路径。我正在考虑的另一个想法。我感到困惑,试图改变Item.DisplayName但它没有setter。变成Item.Name作品。谢谢。 –

+0

如果您使用Item.Name来添加扩展名,那么只需使用该设置即可。它会自动为你做。 – ishara

相关问题