我想将文件从C#传输到接受base64字符串的java webservice。问题是,当我使用c#Convert类对文件进行编码时,它会根据一个小的无符号字节[]生成一个字符串。
在Java byte []中是signed / big endian。当我解码传送的字符串时,我得到一个不同的字节[],因此文件已损坏。
如何将C#中的byte []编码为base64,它等于使用相同字符串在java中解码的byte []?
C#方:
byte[] attachment = File.ReadAllBytes(@"c:\temp\test.pdf");
String attachmentBase64 = Convert.ToBase64String(attachment, Base64FormattingOptions.None);
Java方面:
@POST
@Path("/localpdf")
@Consumes("text/xml")
@Produces("text/xml")
public String getExtractedDataFromEncodedPdf(@FormParam("file") String base64String) {
if(base64String == null) return null;
byte[] data = Base64.decodeBase64(base64String.getBytes());
FileOutputStream ms;
try {
ms = new FileOutputStream(new File("C:\\Temp\\test1234.pdf"));
ms.write(data);
ms.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
文件test1234.pdf已损坏。
答案 0 :(得分:1)
"签名"和#34; big-endian"是非常不同的事情,我相信你会让自己感到困惑。
是的,字节用Java签名并且在C#中没有签名 - 但是我强烈怀疑你在两种情况下都得到了相同的实际位...它只是一点点(例如)11111111在C#中表示255,在Java中表示-1。除非您将字节视为数字(这很少有用),否则它无关紧要 - 如果您只是使用字节来写出来,那肯定没有关系Java端的文件。