2013-11-22 2 views
-2

Я работаю над проектом Dynamic Work в Eclipse, используя JAVA HttpServlets.В JAVA Как отправить байт [] в загружаемый файл?

У меня есть некоторые данные в формате byte [], которые я получаю через вызов API. Я могу сохранить это в новом файле, но я хочу, чтобы он был доступен пользователю для загрузки в разных форматах, таких как csv, xls, pdf.

Я ссылался на некоторые ссылки. Я использую метод saveReportToLocalMachine для его сохранения , который работает нормально. Но если я использую displayReportToUser для данных того же байта [], он создает файл downlaodable, но этот файл показывает поврежденную ошибку.

public static void saveReportToLocalMachine(byte[] data, String fileLocation, 
     String filename) throws IOException { 

    File file = new File(fileLocation, filename); 
    FileOutputStream fstream = new FileOutputStream(file); 
    fstream.write(data); 
    fstream.close(); 
} 

Ниже приведен метод, позволяющий загрузить файл.

private void displayReportToUser(byte[] byteData, String outputType, 
HttpServletResponse resp) throws IOException { 
    resp.setContentType("application/pdf"); 
    resp.setHeader("Content-Disposition","attachment;filename=temp.pdf"); 

    ServletOutputStream out = resp.getOutputStream(); 

    out.write(byteData); 
    out.flush(); 
    out.close(); 

} 

Но это не работает для меня. Может ли кто-нибудь объяснить и объяснить? Пожалуйста, укажите ошибки

+0

вы должны написать свой ответ или по крайней мере принять ответ ниже ... – Ishikawa91

ответ

1
while(in.read(outputByte, 0, 4096) != -1) 
{ 
    out.write(outputByte, 0, 4096); 
} 

Вы не обращая внимания на счет. Correc цикл копирования в Java выглядит следующим образом:

int count; 
while((count = in.read(outputByte)) > 0) 
{ 
    out.write(outputByte, 0, count); 
} 

Вам не нужно промывать out перед закрытием.

Но поскольку у вас есть данные как byte[],, вам нужно только позвонить out.write(data). Нет необходимости в ByteArrayInputStream, или в петле вообще.

+0

Я пробовал, но не работал .. он загружает файл, но показывает его как поврежденный. Но если я вывожу данные байта [] в новый файл, он отлично работает, поэтому проблема не в данных. – Abhinav

+0

Возможно, вы не скопировали код точно. См. Также мое редактирование. Я не знаю, что там делает ByteArrayInputStream. Вам это не нужно. – EJP

+0

Спасибо за ответ быстро, не могли бы вы указать на ошибки в моем коде? Я улучшил свой вопрос – Abhinav

Смежные вопросы