Я могу успешно отправить файл в Filenet, используя их API (FileNet.API.dll) v5.2.1, но когда я пытаюсь retreive it, это 0-байтовый файл без содержимого.Добавление файла в хранилище объектов FileNet, но когда я его извлекаю, он пуст, 0 байтовый файл
Это, по существу, с использованием методов, найденные в их дем C# программы, которая отправляет и получает файлы, найденные здесь (http://www-01.ibm.com/support/docview.wss?uid=swg24028791)
Разницы с моим сценарием является то, что я буду иметь исходные данные уже в виде потока, так что я дон 't нужно преобразовать локальный файл в поток, как это делает demo.
Таким образом, следующие методы запускаются более или менее в этом порядке, некоторые повторяются.
Основной метод создания док выполняет
IDocument doc = CreateDocument(stream, fnDoc.mimeType, fnDoc.docName, fnRepo.os, "Common", paRequest);
IFolder folder = FetchFolder(fnRepo.os, "/");
doc.Save(RefreshMode.REFRESH);
IReferentialContainmentRelationship rcr = FileContainable(fnRepo.os, doc, folder);
rcr.Save(RefreshMode.REFRESH);
checkInDoc(doc);
методы, перечисленные выше, ниже
public static IDocument CreateDocument(Stream stream, String mimeType, String docName, IObjectStore os, String className)
{
IDocument doc = null;
if (className.Equals(""))
doc = Factory.Document.CreateInstance(os, null);
else
doc = Factory.Document.CreateInstance(os, className);
doc.Properties["DocumentTitle"] = docName;
doc.MimeType = mimeType;
IContentElementList cel = CreateContentElementList(stream, docName);
if (cel != null)
doc.ContentElements = cel;
return doc;
}
следующий, что называется является CreateContentElementList
public static IContentElementList CreateContentElementList(Stream stream, string docName)
{
IContentElementList cel = null;
if (CreateContentTransfer(stream, docName) != null)
{
cel = Factory.ContentElement.CreateList();
IContentTransfer ct = CreateContentTransfer(stream, docName);
cel.Add(ct);
}
return cel;
}
затем, наконец, CreateContentTransfer
public static IContentTransfer CreateContentTransfer(Stream stream, string docName)
{
IContentTransfer ct = null;
ct = Factory.ContentTransfer.CreateInstance();
ct.SetCaptureSource(stream);
ct.RetrievalName = docName;
return ct;
}
На данный момент длины и размера ct нет, но они могут быть установлены вручную, поэтому я не уверен, что это важно. Также переменный поток все еще имеет контент.
Док возвращается из CreateDocument
Тогда папка забирается
public static IFolder FetchFolder(IObjectStore os, String fPath)
{
IFolder f = Factory.Folder.FetchInstance(os, fPath, null);
return f
}
затем
public static IReferentialContainmentRelationship FileContainable(IObjectStore os, IContainable c, IFolder folder)
{
IReferentialContainmentRelationship rcr = null;
if (c is IDocument)
rcr = folder.File((IDocument)c, AutoUniqueName.AUTO_UNIQUE, ((IDocument)c).Name, DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE);
else
rcr = folder.File((ICustomObject)c, AutoUniqueName.AUTO_UNIQUE, ((ICustomObject)c).Name, DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE);
return rcr;
}
public static void checkInDoc(IDocument doc)
{
doc.Checkin(AutoClassify.AUTO_CLASSIFY, CheckinType.MINOR_VERSION);
doc.Save(RefreshMode.REFRESH);
doc.Refresh();
}
Так я пропускаю что-то, какой-то последняя часть фактически положил содержимое на сервере или что-то?
Был ли ваш поток ранее прочитан (как в, вы в конце вашего потока)? Указывает ли ACCE, что присутствует ContentElement? –
Хороший вопрос, я передаю его как MemoryStream, который был создан методом Stream.CopyTo, тогда GetButter выполняется с MemoryStream, поэтому я предполагаю, что это может быть в конце. Позвольте мне проверить это и что такое ACCE? – programmerNOOB
То есть, положение потока было в конце, установите его до нуля: IContentTransfer.SetCaptureSource (поток); был вызван – programmerNOOB