передача файла

  • Автор темы karapuz
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

karapuz

Здравствуйте, тут проблемка есть! Имеется клиент-серверное приложение! На стороне клиента генериться отчет! Надо что бы клиент смог как нить его получить! Как это можно сделать?
 
V

vovchik

Здравствуйте, тут проблемка есть! Имеется клиент-серверное приложение! На стороне клиента генериться отчет! Надо что бы клиент смог как нить его получить! Как это можно сделать?

Если отчет создается на стороне клиента, то какой смысл передавать его клиенту?
Если надо передать отчет от клиента серверу, то можно использовать классы Socket и ServerSocket. Пердача будет по TCP/IP.
 
S

Shurup

Если отчет на стороне сервера кладется по определенному адресу, то проще юзать URL:
new URL("http://server/report.pdf").getInputStream();// или типа того
 
K

karapuz

ТЬфу ты, описка получилась. Отчет на стороне сервера.
Для: Shurup а поподробнее можно, я только могу узнать абсолютный путь к файлу, как мне из него сформировать нормальный УРЛ?
 
S

Shurup

Если отчет генерится и сохраняется где-то в файловой системе, то не пойдет так просто - нужно чтобы файл был доступен клиенту (расшарен).

Если он не расшарен, а это скорее всего, и так правильнее, то просто напиши сервлет который будет возвращать в ответ на идентификатор отчета этот файл отчета.
Смотри javadoc к перечисленным вещам (javax.servlet.http.HttpServlet, java.net.URL), и вопросов вознивать не будет.



Эм.. Если у тебя не веб приложение, то тогда, конечно, java.net.ServerSocket используй ))
Либо если отчеты открыты для публичного просмотра, то расшаривай их (клади в папку, которая в сетке доступна), и тогда клиент сможет к нему доступиться через java.net.URL.
 
K

karapuz

Фсе, вопрос решился! Вот кусочек кода:


Код:
	  FileInputStream bis = null;
ServletOutputStream bos = null;

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
// Устанавливаем тип содержимого	  
response.setContentType("application/"+str); 
response.setHeader("Content-disposition","filename=file."+str);

try {
File fileName = new File("rep\\testReport."+str);
bis = new FileInputStream(fileName.getAbsolutePath());
bos = response.getOutputStream();
byte[] buff = new byte[2048];
int bytesRead;
while (-1 !=(bytesRead = bis.read(buff,0,buff.length)))
{
bos.write(buff,0,bytesRead);
}
response.getOutputStream().flush(); 
response.getOutputStream().close(); 
context.responseComplete(); 
} 

catch (IOException e) {
e.printStackTrace(); 
}

} catch (JRException e) {
// TODO
}

8<---- ????
не забываем юзать тэг
Код:
[/b]
 
S

Shurup

ужос, вынеси всю логику в отдельные классы и методы..
доставай респонз в однмо месте и передавай его модели, в модели используй утилитный класс для передачи файла, работающий уже с outputStream и т.д.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!