2011-09-08 4 views
1

MemoryStream에 생성 된 iTextSharp PDF 파일을 만들었습니다. 하지만 이제이 파일을 Kentico 미디어 라이브러리에 전달해야합니다.Kentico - MemoryStream 파일을 MediaFileInfo API로 전달

누구든지 내 방법을 보여줄 수 있다면 고마워 할 것입니다. 현재 코드는 다음과 같습니다.

//Media Library Info - takes Media Library Name and Website Name 
     MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo("MyLibrary", CMSContext.CurrentSiteName); 

     //Folder in Media Library where Item will be Inserted 
     string mediaLibraryFolder = folder; 

     //create media file info item - takes the relative path to the document, the library ID, and the folder name where the document will be located within the media library 
     MediaFileInfo fileInfo = new MediaFileInfo(); 

     fileInfo.FileLibraryID = libraryInfo.LibraryID; 
     fileInfo.FileBinaryStream = file; 
     fileInfo.FileName = title.Replace(" ", "").Trim(); 
     fileInfo.FileTitle = title; 
     fileInfo.FileDescription = description; 
     fileInfo.FileExtension = ".pdf"; 
     fileInfo.FileMimeType = "application/pdf"; 
     fileInfo.FilePath = String.Concat("/", folder, "/", title.Replace(" ", "").Trim(), ".pdf"); 

     // Save media file info 
     MediaFileInfoProvider.ImportMediaFileInfo(fileInfo); 

null이 허용되는 열로 인해 데이터베이스 오류가 계속 발생합니다. FileSize, FileExtension 등. 내가 MemoryStream을 사용하고 있기 때문에 모든 정보를 제공 할 방법을 찾을 수 없습니다.

MemoryStream 파일과 함께 MediaFileInfo API를 잘못 사용하고 있습니까?

답변

1

사실, 나는 당신이 라덱이 말한 것을 아무것도 할 필요가 없다고 생각합니다. 파일을 디스크로 스트리밍하여 저장 한 다음 사용중인 가져 오기 방법을 호출하여 미디어 라이브러리로 가져올 수 있습니다.

예를 들어 "MySite"사이트의 "Site Images"라는 미디어 라이브러리에는 디스크에 /MySite/media/Site Images/이라는 폴더가 있습니다. 파일을 거기에 놓으십시오 (원하는 경우 하위 폴더를 사용할 수 있음). 이 시점에서 파일은 미디어 라이브러리의 "in"이지만 아직 가져 오지 않았으므로 사용할 수 없습니다. CMS Desk 인터페이스에서 미디어 라이브러리를 보면 이것이 사실임을 알 수 있습니다. 그러나이 파일은 아직 미디어 라이브러리로 가져 오지 않았으므로 새 파일 옆에 노란색 삼각형 안에 느낌표가 표시되어야합니다.

올바른 위치에서 파일을 가져온 후 해당 파일 정보를 사용하여 MediaFileInfo 개체를 채우고 파일을 가져올 수 있습니다.

+0

나는 그것이 맞는 것을 알았다. 감사합니다 존! – R100

+0

괜찮습니다! 다행히 도울 수있어. 원하는 경우 upvote로 자유롭게하십시오 : D –

+0

Upvote Done! :-) – R100

0

MemoryStream 클래스에는 이러한 정보가 포함되어 있지 않으므로이 객체에서 직접 얻을 수는 없습니다. 어쨌든 FileSize 속성을 제공하려면 해결 방법으로 ms.Length 속성을 사용할 수 있습니다. 기본적으로이 특정 속성은 중요하지 않으므로 일부 더미 숫자 일 수도 있습니다. 확장 기능 - "fileInfo.FileExtension =".pdf ";"와 같이 설정하더라도이 속성이 null이라는 오류가 표시된다고 말하는 중입니까? 당신은 명확히 할 수 있습니까? 또한 다른 속성 인 FileSiteID, FileCreatedWhen, FileGUIDFilePath (지정된 미디어 라이브러리 내부의 경로)을 설정해야합니다. Kentico API의 전체 소스 코드를 가지고 있다면 MediaFileInfo 개체의 생성자에서 영감을 얻어 \ MediaLibrary \ MediaFileInfo.cs 클래스에있는 개체를 얻을 수 있습니다.