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,语言组织不好,见谅。 怎么让自己的网页是压缩的如图 求帮助svn commit不了 字符串截取。 路径总出问题 jsp中如何获取全路径? 用window.open()打开无边框窗口后窗口大小和位置的设置? tomcat应用无法启动问题求助 DES+BASE64解密问题 在SERVLET,listener,filter,javabean里的变量并发问题。 mysql 查询出现多个无关记录,可能是 浏览器直接请求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,语言组织不好,见谅。