2012-05-04 23 views
9

Tôi muốn đẩy các tệp PDF, Word và Excel vào SDL Tridion 2011 bằng cách sử dụng dịch vụ cốt lõi.Làm cách nào để nhập tệp bên ngoài vào SDL Tridion 2011 bằng dịch vụ cốt lõi?

tôi đã cố gắng bên dưới mã nhưng nhận được lỗi này:

Invalid value for property 'BinaryContent'. Unable to open uploaded file:

using (ChannelFactory<ISessionAwareCoreService> factory = 
    new ChannelFactory<ISessionAwareCoreService>("wsHttp_2011")) 
{ 
    ISessionAwareCoreService client = factory.CreateChannel(); 
    ComponentData multimediaComponent = (ComponentData)client.GetDefaultData(
             ItemType.Component, "tcm:19-483-2"); 
    multimediaComponent.Title = "MultimediaFile"; 

    multimediaComponent.ComponentType = ComponentType.Multimedia; 
    multimediaComponent.Schema.IdRef = "tcm:19-2327-8"; 

    using (StreamUploadClient streamClient = new StreamUploadClient()) 
    { 
    FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg", 
               FileMode.Open, FileAccess.Read); 
    string tempLocation = streamClient.UploadBinaryContent("images.jpg", 
                  objfilestream); 
    } 
    BinaryContentData binaryContent = new BinaryContentData(); 
    binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg"; 
    binaryContent.Filename = "images.jpg"; 
    binaryContent.MultimediaType = new LinkToMultimediaTypeData() 
    { 
    IdRef ="tcm:0-2-65544" 
    }; 
    multimediaComponent.BinaryContent = binaryContent; 

    IdentifiableObjectData savedComponent = client.Save(multimediaComponent, 
                 new ReadOptions()); 

    client.CheckIn(savedComponent.Id, null); 
    Response.Write(savedComponent.Id); 
}  

Trả lời

5

Có một chi của bài viết tuyệt vời của Ryan đây http://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011

Tất cả các tập tin nhị phân được xử lý theo cùng một cách - vì vậy kỹ thuật của anh cho hình ảnh sẽ có giá trị như nhau đối với các tài liệu, chỉ cần đảm bảo bạn sử dụng một Schema với các loại mime thích hợp.

+0

@ Chris. Tôi đã thử mã đó nhưng có lỗi. binaryContent.MultimediaType = new LinkToMultimediaTypeData() {IdRef = id}; tôi đang cố gắng cho một tập tin jpg bạn có thể cho tôi biết làm thế nào để có được id này? Không có app.config trong dự án Cảm ơn trước – Aquarius24

+0

Có lẽ bạn có thể cập nhật câu hỏi của mình giải thích những gì bạn đã làm, hiển thị mã của bạn và chia sẻ lỗi bạn đang nhận. Trên một lưu ý khác - Bạn có xem xét cam kết http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2 chúng tôi đang cố gắng để có được một khu vực SDL Tridion chuyên dụng trên Stack Exchange. Vui lòng sử dụng tài khoản SO của bạn để các câu hỏi hay của bạn được tính vào đề xuất –

+0

nhận được lỗi dưới đây: Giá trị không hợp lệ cho thuộc tính 'BinaryContent'. Không thể mở tệp được tải lên – Aquarius24

4

Quá trình tải lên tập tin nhị phân vào Tridion sử dụng Dịch vụ cốt lõi là:

  1. Tải lên dữ liệu nhị phân để máy chủ Tridion sử dụng một StreamUploadClient. Điều này sẽ trả về cho bạn đường dẫn của tệp trên máy chủ Tridion.
  2. Tạo một BinaryContentData trỏ đến tập tin trên máy chủ Tridion (như vậy với đường dẫn mà bạn nhận lại từ bước 1)
  3. Tạo một ComponentData đó đề cập đến các BinaryContentData từ bước 2
  4. Save the ComponentData

bạn đang thiết lập các đường dẫn nội bộ cho tập tin của bạn trong bước 2.

binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg"; 

Nhưng Tridion sẽ không bao giờ có thể để tìm tệp đó ở đó. Thay vào đó nên thiết lập đường dẫn mà bạn nhận lại từ UploadBinaryContent:

string tempLocation; 
using (StreamUploadClient streamClient = new StreamUploadClient()) 
{ 
    FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg", 
              FileMode.Open, FileAccess.Read); 
    tempLocation = streamClient.UploadBinaryContent("images.jpg", objfilestream); 
} 
BinaryContentData binaryContent = new BinaryContentData(); 
binaryContent.UploadFromFile = tempLocation; 

Lưu ý rằng Ryan's original code làm chính xác điều đó.

+0

@ puf. Cảm ơn rất nhiều. Nó đã giúp tôi rất nhiều và tôi có thể tải lên ngay bây giờ bất kỳ tệp nào – Aquarius24

+0

@Frank: đó có phải là app.config bắt buộc để tạo các thành phần đa phương tiện sử dụng dịch vụ cốt lõi từ máy cục bộ của tôi không? tôi có nghĩa là (tất cả các hình ảnh trong máy địa phương của tôi).và tôi có thể tạo các thành phần đa phương tiện bằng cách sử dụng dịch vụ cốt lõi, khi các hình ảnh trong máy chủ. Nhưng tôi đang mong đợi như vậy từ địa phương của tôi. – user1428019

+0

Mỗi máy khách dịch vụ cốt lõi cần được hướng dẫn cách kết nối với Tridion Content Manager, hoặc thông qua tệp .config (xem http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithConfigFile) hoặc thông qua các cài đặt tương tự trong mã (xem http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFile). –

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