我正在尝试从服务器下载文件。
我有此方法,但是当我打开下载的文件时,它位于ByteCode中,并且不可读。
File file = new File(request.getPath());
response.setContentType("text/csv;charset=utf-8");
response.setHeader("Content-Disposition","attachment; filename="+file.getName());
response.setHeader("filename",file.getName());
OutputStream resOs= response.getOutputStream();
OutputStream buffOs= new BufferedOutputStream(resOs);
OutputStreamWriter outputwriter = new OutputStreamWriter(buffOs);
FileInputStream inputStream = new FileInputStream(file); //read the file
try {
int c;
while ((c = inputStream.read()) != -1) {
outputwriter.write(c);
}
} finally {
inputStream.close();
outputwriter.flush();
outputwriter.close();
}
};
问题出在哪里?
答案 0 :(得分:2)
由于您的方法写入字节数据,因此将内容类型设置为application / octet-stream,
response.setContentType("application/octet-stream");
答案 1 :(得分:1)
您使用输入流从输入文件中读取单个字节。这是一个文本文件,但是如果您不关心文本内容,可以使用流读取它。
接下来,您创建一个BufferedWriter并开始将您从流中读取的字节(8位)作为char写入您的写入器。这是一个问题,恕我直言。
一旦输入文件中包含多字节字符,您就开始做奇怪的事情。
可以使用流读取文本文件,但是您还应该使用流写入输出。请勿混合使用读取器/写入器和流。
即使您使用流读取文件,也可以将内容类型设置为text / csv,前提是该文件当然是文本文件。