java IO流下载.docx文件时报文件损坏的错误,求解? 你 excel 版本问题不?换个版本试试。 现在的版本 docx 估计 不兼容。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该不会不兼容吧,.docx都出来很多年了。 把下面那段改成这样看看。 in = new ByteArrayInputStream(attachFile.getFileContent()); byte[] buffer = new byte[1024]; os = response.getOutputStream(); int len = 0; while ((len = in.read(buffer)) > 0) { os.write(buffer, 0, len); } 尝试每次读取1024个字节,写入buffer数组,如果少于1024,就会返回实际读取的字节,os.write(buffer);可能多了 write 会将缓冲数组全部写入进去的,而一个byte数组值默认是0,但是0也可以表示一个字节,所以当你的byte数组是空的时候也会写入文件中,也会导致文件打不开字节错乱的问题, 建议 要么用 in.available() 这个来创建数组长度,要么就用楼上的那个方法,指定从数组的位置结束填充 sorry,现在才回复,os.write(buffer, 0, len);这个的意思是将buffer里面0~len的字节写到输出流里面,下载的文件转换成字节流的字节数一般是不能被1024整除的,当输出最后一部分字节的时候,可能没有1024个字节,那么buffer字节数组里多出来的位置就是初始值0,这些也写到输出流里面去了,也就是多写了很多个值为0的字节进去,所以格式不对。 sorry,语言组织不好,见谅。 菜鸟求比较通用的分页结构 在项目中关于java静态的应用? 谁能给个《调查问卷》的系统? <在线等待>关页两个页面间的参数传递 ???关于两层循环,对列进行合计的问题 help me !!!!! 转发 很奇怪的问题,总说我没有初始化 请问哪几个网站是用了JSP技术开发的?! 天杀的,真不明白是怎么回事! 浏览器直接请求Action,Action输出了字符串,浏览器会显示什么。 spring mvc图片上传 如何传递隐藏域的值啊
byte[] buffer = new byte[1024];
os = response.getOutputStream();
int len = 0;
while ((len = in.read(buffer)) > 0) {
os.write(buffer, 0, len);
}
sorry,现在才回复,os.write(buffer, 0, len);这个的意思是将buffer里面0~len的字节写到输出流里面,下载的文件转换成字节流的字节数一般是不能被1024整除的,当输出最后一部分字节的时候,可能没有1024个字节,那么buffer字节数组里多出来的位置就是初始值0,这些也写到输出流里面去了,也就是多写了很多个值为0的字节进去,所以格式不对。 sorry,语言组织不好,见谅。