Я использую приведенный ниже код для загрузки и отображения файла xls из моего веб-приложения. загрузка файла с недопустимыми символами (например, 䡗ⰱㅂ〬ⰱ). Пожалуйста, дайте знать, что мне не хватает в этом коде.
String contentDisposition = "attachment";
String fileName = "Test.xls";
String path = "/xxx/yyy";
final int BUFFER = 1024;
byte servletBytes[] = new byte[BUFFER];
ServletOutputStream out = response.getOutputStream();
FileInputStream fis = new FileInputStream(new File(path));
ByteArrayOutputStream bout = new ByteArrayOutputStream();
int count = 0;
while ((count = fis.read(servletBytes)) > 0) {
bout.write(servletBytes, 0, count);
}
fis.close();
servletBytes = bout.toByteArray();
bout.close();
out.write(servletBytes);
response.setContentType("Application/vnd.ms-excel;charset=UTF-8");
if (contentDisposition.length() > 0) {
response.setHeader("Content-Disposition", contentDisposition + ";filename = " + fileName);
}
out.flush();
out.close();
if (fis != null) {
fis.close();
}
if (bout != null) {
bout.close();
}
Ниже код работает для меня. Содержимое файла загружено, но с именем файла сервлета. Пожалуйста, помогите решить.
String contentDisposition = "attachment";
String path = "/test/ship.xls";
byte servletBytes[] = new byte[BUFFER];
ServletOutputStream out = response.getOutputStream();
FileInputStream fis = new FileInputStream(new File(path));
int count = 0;
while ((count = fis.read(servletBytes)) > 0) {
out.write(servletBytes, 0, count);
}
fis.close();
response.setContentType("Application/vnd.ms-excel;charset=UTF-8");
if (contentDisposition.length() > 0) {
response.setHeader("Content-Disposition", contentDisposition + ";filename = " + new File(path).getName());
}
out.flush();
out.close();
Установка content-Disposition и имени файла должна быть до записи в Stream, а также я оптимизировал код. Таким образом, мы можем избежать проблемы: загрузка файла с именем сервлета.
String contentDisposition = "attachment";
String path = "/test/ship.xls";
byte servletBytes[] = new byte[BUFFER];
ServletOutputStream out = response.getOutputStream();
FileInputStream fis = new FileInputStream(new File(path));
response.setContentType("Application/vnd.ms-excel;charset=UTF-8");
if (contentDisposition.length() > 0) {
response.setHeader("Content-Disposition", contentDisposition + ";filename = " +
new File(path).getName());
}
int count = 0;
while ((count = fis.read(servletBytes)) > 0) {
out.write(servletBytes, 0, count);
}
fis.close();
out.flush();
out.close();