Вы можете скопировать существующий Http-запрос в новый Http-запрос с заголовками
val req: HttpRequest = ???
val hs: Seq[HttpHeader] = Seq(RawHeader("a", "b"))
val reqWithHeaders: HttpRequest = req.copy(headers=hs)
. Наиболее распространенный способ сделать это - включить двоичный элемент как base-64 в элемент. Однако это обходной путь, добавляющий немного объема в файл.
Например, это байты от 00 до 09 (обратите внимание, что нам нужно 16 байтов для кодирования данных размером 10 байтов):
<xml><image>AAECAwQFBgcICQ==</image></xml>
how , эта кодировка зависит от архитектуры. Например, в .NET вы можете использовать Convert.ToBase64String
или XmlWriter.WriteBase64
.
Поскольку XML является текстовым форматом, а изображения, как правило, нет (за исключением некоторых древних и архаичных форматов), в действительности нет разумного способ сделать это. Просмотр таких вещей, как ODT или OOXML, также показывает, что они не встраивают изображения непосредственно в XML.
Однако вы можете конвертировать его в Base64 или аналогичный и встраивать в XML.
Пробелы XML однако в таких случаях обработка может еще больше усложнить ситуацию.
XML - это не формат хранения изображений и двоичных данных. Я думаю, что все зависит от того, как вы хотите использовать эти изображения. Если вы находитесь в веб-приложении и хотели бы прочитать их оттуда и отобразить их, я бы сохранил URL-адреса. Если вам нужно отправить их в другую конечную точку сети, я бы их сериализовал, а не сохранял вручную в XML. Пожалуйста, объясните, каков сценарий.
Я всегда преобразую байтовые данные в кодировку Base64, а затем вставляю изображение.
Это также способ это делает Word, потому что это XML-файлы (не то, что Word является хорошим примером того, как работать с XML: P).
Вот некоторый код, взятый из блога Кирка Эванса , который демонстрирует, как кодировать изображение в C #;
//Load the picture from a file
Image picture = Image.FromFile(@"c:\temp\test.gif");
//Create an in-memory stream to hold the picture's bytes
System.IO.MemoryStream pictureAsStream = new System.IO.MemoryStream();
picture.Save(pictureAsStream, System.Drawing.Imaging.ImageFormat.Gif);
//Rewind the stream back to the beginning
pictureAsStream.Position = 0;
//Get the stream as an array of bytes
byte[] pictureAsBytes = pictureAsStream.ToArray();
//Create an XmlTextWriter to write the XML somewhere... here, I just chose
//to stream out to the Console output stream
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Console.Out);
//Write the root element of the XML document and the base64 encoded data
writer.WriteStartElement("w", "binData",
"http://schemas.microsoft.com/office/word/2003/wordml");
writer.WriteBase64(pictureAsBytes, 0, pictureAsBytes.Length);
writer.WriteEndElement();
writer.Flush();