2014-01-17 86 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

相關問題