跨域文件流传输

 

我们如果要传输一个文件流到另一个域,显然是不能直接将流传输到另一个域中的,所以我们可以获取流的byte数组,然后将它转换为String

FileInputStream is = new FileInputStream(file);
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] b = new byte[2048];
int len;
while((len=is.read(b))>0){
    os.write(b,0,len);
}
byte[] bytes = os.toByteArray();
String str = new String(bytes,"ISO-8859-1");

转换后大约是下面这种格式:

跨域文件流传输_第1张图片

可以看到,是一堆乱码字符,现在我们是可以传输的,但是这些乱码字符在经过http后会自动替换为'?',我们再讲传过来的字符串转为byte数组的话,那么将跟原来的数据不同,导致文件无法打开

所以这里我们用到  URLEncoder.encode(str)   可以将字符串转为16进制,转换完成后,将变成:

跨域文件流传输_第2张图片

 

这种16进制的字符串,16进制计算机是可以识别的,所以将不会发生乱码问题,传到另一个域之后,我们再通过URLDecoder.decode(str) 将str转为图二的byte数组字符串,通过:

byte[] bytes1 = str.getBytes("ISO-8859-1");

得到byte数组,通过ByteArrayOutputStream将byte数组转换为输出流,就可以完成跨域文件流传输

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes1);

 

以上

你可能感兴趣的:(IO)