Скачать CSV-файл Java6 - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь загрузить файл с сервера.

У меня есть этот метод, но когда я открываю загруженный файл, он находится в 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();
            }
        };

в чем проблема?

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Поскольку ваш подход записывает байтовые данные, задайте тип контента для application / octet-stream,

            response.setContentType("application/octet-stream");
1 голос
/ 14 мая 2019

Вы используете входной поток для чтения отдельных байтов из вашего входного файла. Это текстовый файл, но если вас не волнует текстовое содержимое, его можно прочитать потоком.

Затем вы создаете BufferedWriter и начинаете записывать байт (8 бит), который вы читали из своего потока, в виде символов в свой модуль записи. Это проблема, ИМХО.

Как только во входном файле появляются многобайтовые символы, вы начинаете делать странные вещи.

Это нормально, чтобы прочитать ваш текстовый файл с помощью потока, но тогда вы должны также записать вывод с использованием потока. Не смешивайте читатель / писатель и потоки.

Можно также установить тип содержимого как text / csv, даже если вы читаете файл с использованием потока, если, конечно, файл является текстовым файлом.

...