° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° 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()); } } |
На форуме сейчас: гостей - 1 пользователей - 0 |
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26] гостей - 87 / пользователей - 0 |
miniВВ © 2001-2024 |