Форумы Интермех
 ° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° RSS ° Wiki °

Форумы Интермех / API и разработка модулей расширения / Метод добавления нескольких файлов в атрибут
Автор Сообщение
vladmk
Участник
Нижний Новгород

Дата: 24 Сен 2013 14:41:56 ° Поправил: vladmk


Подскажите красивый метод добавления нескольких файлов в атрибут

есть рабочий вариант, но несколько смущает реализация:

public void AddFile(string fileName)
{
IDBAttribute attr = _object.GetAttributeByID(FILEATTRID);

if (attr.Value.ToString() != "") attr.AddValue(null);

IBlobWriter iFileWriter = attr as IBlobWriter;

if (iFileWriter == null) return;

System.IO.FileInfo file = new System.IO.FileInfo(fileName);

BlobInformation blobInfo = BlobInformation.EmptyBlobInformation();

blobInfo.FileName = Path.GetFileName(fileName);
blobInfo.RealFileSize = file.Length;
blobInfo.PackedFileSize = file.Length;

if (iFileWriter.OpenBlob(blobInfo, false))
{
iFileWriter.WriteDataBlock(Helpers.ReadFile(fileName));
}
}

Дмитрий
Участник
НПП ИНТЕРМЕХ

Дата: 26 Сен 2013 11:19:12


Выделенное в коде место можно заменить проверкой if (!attr.IsNull) attr.AddValue(null). Также желательно указать дату модификации сохраняемого файла, иначе будет присвоена текущая дата и время. И понятно, что данный код сохранит файлы в неупакованном виде, что не есть хорошо. Посмотрите в Руководстве программиста IPS главу 7.5.2, где описан класс BlobProcWriter для записи файлов и двоичных данных с клиента в базу IPS. Если нужен пример упаковки и записи на стороне сервера - пишите, опубликуем.

vladmk
Участник
Нижний Новгород

Дата: 26 Сен 2013 11:33:27


Нужен, чем больше примеров тем лучше.

Дмитрий
Участник
НПП ИНТЕРМЕХ

Дата: 30 Сен 2013 18:10:05


Ниже приведён пример упаковки и записи XML-файла с именем fileName в первое значение файлового атрибута attrFile:

using Intermech.Interfaces;

....

attrFile.Index = 0;
XmlDocument xmlDocument = new System.Xml.XmlDocument();

xmlDocument.Load(fileName);
using (MemoryStream ms = new MemoryStream())
{

xmlDocument.Save(ms);
ms.Position = 0;
IPackedStream packedStream = new PackedStream();
using (MemoryStream msPacked = new MemoryStream())
{
packedStream.PackStream(msPacked, ms, (int)ZLibCompressLevels.LevelMax);
IBlobWriter bw = attrFile as IBlobWriter;
bw.OpenBlob(new BlobInformation(ms.Length, msPacked.Length, DateTime.Now, "Типа атрибуты", ArcMethods.ZLibPacked, String.Empty), false);
bw.WriteDataBlock(msPacked.ToArray());
}
}

Ваш ответ

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL 
...



Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль 
 

На форуме сейчас: гостей - 1
пользователей - 0
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26]
гостей - 87 / пользователей - 0


miniВВ © 2001-2021