Создание файла из потока
При работе с внешними сервисами или интеграции с другой системой, может потребоваться создание файла из потока. В интернете есть масса примеров для сохранения файлов на диск, однако в нашем случае, файл нужно сохранять на сервере, а не на локальном диске.
Для этого подключим следующие сборки:
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);