logo

Создание файла из потока

При работе с внешними сервисами или интеграции с другой системой, может потребоваться создание файла из потока. В интернете есть масса примеров для сохранения файлов на диск, однако в нашем случае, файл нужно сохранять на сервере, а не на локальном диске.

Для этого подключим следующие сборки:

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);