2012-01-23 30 views
5

Đây là những gì tôi đã thử và nó dường như không hoạt động. Tôi không nhận được bất kỳ lỗi nào, nhưng dường như không thêm tệp vào thư viện phương tiện.Tôi làm cách nào để tải tệp lên thư viện phương tiện Sitecore bằng mã bằng điều khiển ASP FileUpload?

using(new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    if(myFileControl.HasFile) 
    { 
    MediaCreatorOptions _options = new MediaCreatorOptions(); 
    _options.Database = Factory.GetDatabase("master"); 
    _options.FileBased = false; 
    _options.IncludeExtensionInItemName = false; 
    _options.KeepExisting = false; 
    _options.Versioned = false; 
    _options.Destination = "/sitecore/media library"; 
    MediaItem _newFile = MediaManager.Creator.CreateFromStream(myFileControl.FileContent, myFileControl.FileName, _options); 
    } 
} 

Vấn đề lớn nhất của tôi là tôi không thực sự hiểu những thông số và thuộc tính khác nhau làm gì. Thuộc tính "Đích" cho MediaCreatorOptions là gì? Nó có phải là một thư mục không? Có phải nó cũng có tên mục không? Ba tham số cho phương thức CreateFromStream là gì? Người đầu tiên có vẻ là Stream - tôi hiểu điều đó. Nhưng thứ hai là "FileName". Cái này phải là gì? Nếu tôi đang tạo từ một luồng tại sao tôi cần phải nói cho Sitecore FileName?

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

4

Tôi nghĩ rằng vấn đề của bạn ở đây là bạn không sử dụng các tùy chọn thích hợp cho lệnh gọi API Sitecore. Bạn không có điểm đến thực sự .. đó là nơi bạn sẽ chỉ định mục Sitecore sẽ trở thành mục của bạn ... không chỉ là một thư mục. Có vẻ như bạn đang cố tạo mục thư viện phương tiện.

mỗi Sách API nội dung trên SDN:

Làm thế nào để Tạo Truyền thông Items Sử dụng API

Bạn có thể sử dụng Sitecore.Resources.Media.MediaCreator và lớp Sitecore.Resources.Media.MediaCreatorOptions tạo các mục phương tiện từ tệp. Ví dụ, để tạo ra các mục media/Sitecore/Media Library/Images/mẫu trong cơ sở dữ liệu Thạc sĩ từ tập tin C: \ temp \ sample.jpg:

Sitecore.Resources.Media.MediaCreatorOptions options = new Sitecore.Resources.Media.MediaCreatorOptions(); 
options.Database = Sitecore.Configuration.Factory.GetDatabase("master"); 
options.Language = Sitecore.Globalization.Language.Parse(Sitecore.Configuration.Settings.DefaultLanguage); 
options.Versioned = Sitecore.Configuration.Settings.Media.UploadAsVersionableByDefault; 
options.Destination = "/sitecore/media library/images/Sample"; 
options.FileBased = Sitecore.Configuration.Settings.Media.UploadAsFiles; 
Sitecore.Resources.Media.MediaCreator creator = new Sitecore.Resources.Media.MediaCreator(); 
Sitecore.Data.Items.MediaItem sample = creator.CreateFromFile(@"C:\temp\sample.jpg",options) 
2

Corey, tôi không chắc chắn nếu điều này vẫn còn có liên quan, nhưng tôi chỉ chạy vào chính xác những câu hỏi bạn đã làm. @divamatrix không thực sự trả lời các câu hỏi về luồng và tôi muốn điền câu hỏi này trong trường hợp người khác (hoặc bản thân tôi một lần nữa) cần câu trả lời.

Thuộc tính "Đích" cho MediaCreatorOptions là gì?

Như @divamatrix chỉ ra, Destination tài sản trong MediaCreatorOptions là nơi bạn muốn MediaItem bạn sống trong Sitecore Media Library (ví dụ./Sitecore/Media Library/hình ảnh/hình ảnh tạo)

Có phải đó chỉ là một thư mục không? Có phải nó cũng có tên mục không?

Không, nó không phải là tên của thư mục hiện có trong thư viện phương tiện. Nó sẽ là đường dẫn của mục bạn muốn tạo bao gồm tên của mục bạn muốn tạo ra (xem ở trên).

Ba thông số cho phương pháp CreateFromStream là gì? Người đầu tiên có vẻ là Stream - tôi hiểu điều đó. Nhưng thứ hai là "FileName". Cái này phải là gì? Nếu tôi đang tạo từ một luồng tại sao tôi cần phải nói cho Sitecore FileName?

Các tên tập tin bị bỏ qua nếu bạn đặt Destination với MediaCreatorOptions vì phương pháp GetItemPath chỉ sẽ trở lại options.Destination nếu không null hoặc rỗng. Nếu bạn không đặt Destination, phương pháp GetItemPath sẽ cố gắng hết sức để cung cấp cho bạn một đường dẫn thích hợp trong thư viện phương tiện. Về bản chất, khi sử dụng CreateFromStream (theo như tôi có thể biết), hãy đặt Destination trong MediaCreatorOptions hoặc đặt filePath đến nơi bạn muốn mục của mình và phương pháp GetItemPath sẽ cố gắng đặt ở đó, nhưng có thể ném ngoại lệ nếu nó không thể.

Các vấn đề liên quan