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

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

karapuz

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

vovchik

#2
Здравствуйте, тут проблемка есть! Имеется клиент-серверное приложение! На стороне клиента генериться отчет! Надо что бы клиент смог как нить его получить! Как это можно сделать?
Если отчет создается на стороне клиента, то какой смысл передавать его клиенту?
Если надо передать отчет от клиента серверу, то можно использовать классы Socket и ServerSocket. Пердача будет по TCP/IP.
 
S

Shurup

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

karapuz

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

Shurup

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

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



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

karapuz

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


Код:
	  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

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