但是单独去打开生成的word没有问题。
生成的word文档类似这种格式:
下载代码:
String filename = "";
File file = new File(path);
// 取得文件名。
if (file != null) {
filename = file.getName();
}
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1);
filename = "材料证明" + user.getCusId() + "." + ext;
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
String enFileName = URLEncoder.encode(filename, "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + enFileName);
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-download");
int len = 0;
while ((len = fis.read(buffer)) > 0) {
toClient.write(buffer, 0, len);
}
toClient.flush();
toClient.close();
11 个解决方案
#1
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
2、你自己新建一个word,然后再下载看看
#2
是的两个文件的大小不一样,生成的比下载的小
我自己写的word文档下进行下载也是一样的效果
#3
和你说的情况一样,请问这是什么问题
#4
那还是写入的不对
把这句byte[] buffer = new byte[fis.available()];
改为这样byte[] buffer = new byte[1024];试试
把这句byte[] buffer = new byte[fis.available()];
改为这样byte[] buffer = new byte[1024];试试
#5
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
#6
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
如果是byte[] buffer = new byte[1024]那么这样读的话,然后下面象你那样写的话,是分多次读和写的
如果是byte[] buffer = new byte[fis.available()];那么这个时候就可以一次性fis.read(buffer);读出来,然后写也是一次性写进去(toClient.write(buffer);)
#7
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
如果是byte[] buffer = new byte[1024]那么这样读的话,然后下面象你那样写的话,是分多次读和写的
如果是byte[] buffer = new byte[fis.available()];那么这个时候就可以一次性fis.read(buffer);读出来,然后写也是一次性写进去(toClient.write(buffer);)
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
#8
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
#9
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
还是相同的问题,另外我刚试了字符流读写的方式,也不行。
虽然现在还没解决,不过还是非常感谢!!
文件有办法发吗?csdn能上传文件?
#10
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
还是相同的问题,另外我刚试了字符流读写的方式,也不行。
虽然现在还没解决,不过还是非常感谢!!
文件有办法发吗?csdn能上传文件?
不客气,也没帮到你,你把你qq发个私信给我,我加你
#11
下载是没有问题的,问题出在生成word的方法上(XWPFDocument 生成一个word)。
#1
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
2、你自己新建一个word,然后再下载看看
#2
点击一个连接时,我先用XWPFDocument 生成一个word,然后用流的方式下载该文档,提示该文件已被损坏。
但是单独去打开生成的word没有问题。
生成的word文档类似这种格式:
下载代码:String filename = "";
File file = new File(path);
// 取得文件名。
if (file != null) {
filename = file.getName();
}
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1);
filename = "材料证明" + user.getCusId() + "." + ext;
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
String enFileName = URLEncoder.encode(filename, "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + enFileName);
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-download");
int len = 0;
while ((len = fis.read(buffer)) > 0) {
toClient.write(buffer, 0, len);
}
toClient.flush();
toClient.close();
是的两个文件的大小不一样,生成的比下载的小
我自己写的word文档下进行下载也是一样的效果
#3
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
#4
那还是写入的不对
把这句byte[] buffer = new byte[fis.available()];
改为这样byte[] buffer = new byte[1024];试试
把这句byte[] buffer = new byte[fis.available()];
改为这样byte[] buffer = new byte[1024];试试
#5
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
#6
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
如果是byte[] buffer = new byte[1024]那么这样读的话,然后下面象你那样写的话,是分多次读和写的
如果是byte[] buffer = new byte[fis.available()];那么这个时候就可以一次性fis.read(buffer);读出来,然后写也是一次性写进去(toClient.write(buffer);)
#7
1、比较下你下载下来的这个word和你原来的word大小是不是一样
2、你自己新建一个word,然后再下载看看
和你说的情况一样,请问这是什么问题
我以前用的就是 byte[] buffer = new byte[1024];试试
是不是应该将文件一次性写入到流中?
如果是byte[] buffer = new byte[1024]那么这样读的话,然后下面象你那样写的话,是分多次读和写的
如果是byte[] buffer = new byte[fis.available()];那么这个时候就可以一次性fis.read(buffer);读出来,然后写也是一次性写进去(toClient.write(buffer);)
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
#8
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
#9
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
还是相同的问题,另外我刚试了字符流读写的方式,也不行。
虽然现在还没解决,不过还是非常感谢!!
文件有办法发吗?csdn能上传文件?
#10
一次性读写也不行
问一下像这种问题一般是什么情况引起的。
还是文件大小不一致?,按道理讲是没有问题的,我也特意本地测试了下,文件下载是正常的,要不把你能打开,但是下载不正常的word发给我,我本地下载看看
还是相同的问题,另外我刚试了字符流读写的方式,也不行。
虽然现在还没解决,不过还是非常感谢!!
文件有办法发吗?csdn能上传文件?
不客气,也没帮到你,你把你qq发个私信给我,我加你
#11
下载是没有问题的,问题出在生成word的方法上(XWPFDocument 生成一个word)。