Создание файла из потока
При работе с внешними сервисами или интеграции с другой системой, может потребоваться создание файла из потока. В интернете есть масса примеров для сохранения файлов на диск, однако в нашем случае, файл нужно сохранять на сервере, а не на локальном диске.
Для этого подключим следующие сборки:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using EleWise.ELMA.Files; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Entities; using EleWise.ELMA.Model.Entities.ProcessContext; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Model.Types.Settings; using EleWise.ELMA.Runtime.Managers; using EleWise.ELMA.Services;
И напишем метод:
private BinaryFile CreateBinaryFile(Stream stream, string fileName)
{
var temp = BinaryFile.CreateContentFilePath(fileName);
using (var fs = new FileStream(temp, FileMode.CreateNew, FileAccess.Write))
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(fs);
}
var mimeMappingService = Locator.GetServiceNotNull<IMimeMappingService>();
var contractTemplate = new BinaryFile
{
ContentType = mimeMappingService.GetTypeByExtension(Path.GetExtension(fileName)),
Name = Path.GetFileName(fileName),
ContentFilePath = temp,
CreateDate = DateTime.Now,
};
DataAccessManager.FileManager.SaveFile(contractTemplate);
return contractTemplate;
}
Теперь его можно вызвать в данном процессе.
Рассмотрим на примере создания версии документа:
var file = CreateBinaryFile(stream, name);
PublicAPI.Docflow.DocumentVersion.AddDocumentVersion(context.Doc, file, DocumentVersionStatus.Current);