我通过 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 中读取和发送字节数组的方式有什么问题?