gpt4 book ai didi

c# - 如何在 xml 字符串中发送二进制数据

转载 作者:太空狗 更新时间:2023-10-29 20:02:08 27 4
gpt4 key购买 nike

我想以下列 xml 格式将二进制文件发送到 .net c# 组件

<BinaryFileString fileType='pdf'>
<!--binary file data string here-->
</BinaryFileString>

在被调用的组件中,我将使用上面的 xml 字符串并将 BinaryFileString 标记中接收到的二进制字符串转换为 filetype='' 属性指定的文件。文件类型可以是 doc/pdf/xls/rtf

我在调用应用程序中有从要发送的文件中取出字节的代码。我如何准备将其与 xml 标记一起发送?我希望应用程序向组件发送一个字符串而不是字节流。这是因为我无法仅通过查看字节流来破译文件类型 [pdf/doc/xls]。因此具有文件类型属性的 xml 字符串。对此有什么想法吗?

下面提取字节的方法

   FileStream fs = new FileStream(_filePath, FileMode.Open, FileAccess.Read);
using (Stream input = fs)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{}
}
return buffer;

谢谢。

编辑:

只是为了阐明为什么我使用 xml 字符串而不是在我的组件上设置属性。实际上,我的调用应用程序正在尝试模拟 Siebel 将如何调用我的组件。 http://download.oracle.com/docs/cd/E05553_01/books/eScript/eScript_JSReference244.html#wp1014380我不确定 Siebel 是否可以根据需要设置我的组件属性。所以我正在研究它以 xml 发送数据的角度。

最佳答案

Base64 表示法普遍用于表示二进制数据。

public void EncodeWithString() {
System.IO.FileStream inFile;
byte[] binaryData;

try {
inFile = new System.IO.FileStream(inputFileName,
System.IO.FileMode.Open,
System.IO.FileAccess.Read);
binaryData = new Byte[inFile.Length];
long bytesRead = inFile.Read(binaryData, 0,
(int)inFile.Length);
inFile.Close();
}
catch (System.Exception exp) {
// Error creating stream or reading from it.
System.Console.WriteLine("{0}", exp.Message);
return;
}

// Convert the binary input into Base64 UUEncoded output.
string base64String;
try {
base64String =
System.Convert.ToBase64String(binaryData,
0,
binaryData.Length);
}
catch (System.ArgumentNullException) {
System.Console.WriteLine("Binary data array is null.");
return;
}

// Write the UUEncoded version to the XML file.
System.IO.StreamWriter outFile;
try {
outFile = new System.IO.StreamWriter(outputFileName,
false,
System.Text.Encoding.ASCII);
outFile.Write("<BinaryFileString fileType='pdf'>");
outFile.Write(base64String);
outFile.Write("</BinaryFileString>");
outFile.Close();
}
catch (System.Exception exp) {
// Error creating stream or writing to it.
System.Console.WriteLine("{0}", exp.Message);
}
}

在接收端,您可以反转此操作并取回原始文件内容,如下所述。

        // Convert the Base64 UUEncoded input into binary output.
byte[] binaryData;
try {
binaryData =
System.Convert.FromBase64String(base64String);
}
catch (System.ArgumentNullException) {
System.Console.WriteLine("Base 64 string is null.");
return;
}
catch (System.FormatException) {
System.Console.WriteLine("Base 64 string length is not " +
"4 or is not an even multiple of 4." );
return;
}

关于c# - 如何在 xml 字符串中发送二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com