0

我通过 basicHTTPBinding (SOAP 1.1) 将 .zip 文件作为字节数组发送到 WCF 服务。

基本上,从光盘读取文件并以文本信封对象的形式发送到服务器。

在 .net 中,我以下列方式从光盘中读取文件:

...

var bytes = ReadGridLibFile(path + fileName);

....
private static byte[] ReadGridLibFile(string fileName)
        {
            byte[] bytes;
            int numBytesToRead;
            using (FileStream fsSource = new FileInfo(fileName).OpenRead())
            {
                // Read the source file into a byte array.
                bytes = new byte[fsSource.Length];
                numBytesToRead = (int)fsSource.Length;
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    // Read may return anything from 0 to numBytesToRead.
                    int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                    // Break when the end of the file is reached.
                    if (n == 0)
                        break;

                    numBytesRead += n;
                    numBytesToRead -= n;
                }
                numBytesToRead = bytes.Length;
            }
            return bytes;
        }

当这样的字节数组发送到 WCF 服务时,它会被写入服务器端的磁盘并成为可打开的 .zip 存档。

我需要为相同的上传功能实现一个 perl 客户端。

在 perl 中,我读取这样的字节:

while (read(FILE, $buf, 60 * 57)) {
$bytes .= $buf;
}
close(FILE);
$bytes = encode_base64( $bytes );

当我将 $bytes 作为数据放入信封对象并通过 HTTP::Request 手动发送时,在服务器上,我得到一个字节数组,但是当保存到磁盘时,它是一个坏的(损坏的)zip 存档。我在 perl 中读取和发送字节数组的方式有什么问题?

4

0 回答 0