我必须将文件发送到我的 Web 服务,但 Web 服务假定该文件(字节数组)为 base64Binary。
在编码之前,byteArrayFile 作为常规文件保存在磁盘上。 (我这样做只是为了测试)
因此,在我的 Web 服务 Java 客户端中,我以这种方式发送信息:
String file = new sun.misc.BASE64Encoder().encode(byteArrayFile);
port.sendFileToWebService(file);
Web 服务必须解码信息并将接收到的文件保存在磁盘上。
[WebMethod]
public string sendFileToWebService(string file)
{
string dirname = HttpContext.Current.Request.PhysicalApplicationPath + "\\Attachments\\";
if (!System.IO.Directory.Exists(dirname))
{
System.IO.Directory.CreateDirectory(dirname);
}
string filename = dirname + "/" + "file.sim";
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] byteArray = null;
byteArray = Convert.FromBase64String(file.Replace("\n", ""));
byte[] responseArray = myWebClient.UploadData(filename, "POST", byteArray);
return "Webservice says OK";
}
问题是:
保存在磁盘上的文件(编码前)和用 C# 解码的文件不相等。
不知道是Java编码的问题还是C#解码的问题。
任何建议,包括更改文件类型或逻辑过程,都将受到赞赏。
提前致谢!
编辑 -
文件比较:
原始文件http://img819.imageshack.us/img819/820/originalu.png http://img819.imageshack.us/img819/820/originalu.png
解码文件(Java编码后)http://img826.imageshack.us/img826/3184/processed.png http://img826.imageshack.us/img826/3184/processed.png