Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача файла по сети 
:(
    Опции темы
Nesmishlenish
Дата 21.8.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 6.4.2006
Где: Беларусь, г.Минск

Репутация: -1
Всего: нет



  Здравствуйте, тут проблемка есть одна) Имется клиент - серверное приложение, на сервере генерится файл (отчет если быть точнее), и соответственно сохранить его можно только на сервере)! Вот, а нужно добиться что бы этот файл каким-то образом находился на стороне клиента) Как это можно сделать? 
PM MAIL ICQ   Вверх
powerOn
Дата 21.8.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Что за сервер?


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Nesmishlenish
Дата 21.8.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 6.4.2006
Где: Беларусь, г.Минск

Репутация: -1
Всего: нет



 Oracle App Server
PM MAIL ICQ   Вверх
LSD
Дата 21.8.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



А что есть на клиенте?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nesmishlenish
Дата 23.8.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 6.4.2006
Где: Беларусь, г.Минск

Репутация: -1
Всего: нет



Все что понадобиться то и поставим) тут идея важна)
PM MAIL ICQ   Вверх
LSD
Дата 23.8.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 5
Всего: 538



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

Вариантов много, задача не до конца ясна.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nesmishlenish
Дата 24.8.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 6.4.2006
Где: Беларусь, г.Минск

Репутация: -1
Всего: нет



Цитата(LSD @ 23.8.2006,  10:41)
А можно просто сгенерировать пользователю веб страничку где дать ссылку на файл.

 Я собственно и попытался сделать что то подобное. Генерю ссылку, но тут возникает трабл: я генерирую два отчета- в RTF и PDF, ссылки отличаются только расширением файла, когда пользователь нажимает кнопочку и при этом генерится RTF то в браузере выскакивает окошко мол Сохранить файл или Открыть его, в этом случае работает все как надо, а вот когда нажимается кнопочка и генериться PDF то выскакивает ошибка :
Код
java.lang.NullPointerException
    at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
    at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:367)    
    at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:336)    
    at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:196)    
    at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:629)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)    
    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].util.ResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)

А генерирую ссылку вот таким вот кодом:
Код
HttpServletRequest hsr = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
URL url;
URL ur;
try
{
  url = new URL(hsr.getRequestURL().toString());
  ur = new URL(url,"testReport" + str);
  ExternalContext ectx = FacesContext.getCurrentInstance().getExternalContext();
  HttpServletResponse response = (HttpServletResponse)ectx.getResponse();
  response.sendRedirect(ur.getFile());
}
catch(MalformedURLException e)
{
  // TODO
}
catch(IOException e)
{
  // TODO
}

PM MAIL ICQ   Вверх
Nesmishlenish
Дата 31.8.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 6.4.2006
Где: Беларусь, г.Минск

Репутация: -1
Всего: нет



Все, проблема решена) 
Вот кусочек кода который отвечает за передачу файла на клиента)
Код
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(); 
}

PM MAIL ICQ   Вверх
Nehxby
Дата 11.9.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



Здравствуйте. Есть уточняющий вопрос.
Код, приведенный здесь в качестве примера, я использовал и он работает.
НО: хотелось бы передавть файлы в запакованном формате, но чтобы конечный пользователь этого "не чувствовал"   smile  (передаются файлы *.doc - хотелось бы чтобы они сразу и открывались у пользователя в браузере)

Я решил использовать для этого передачу файлов запакованных GZIP:

Код

получение имени файла
...
            response.setHeader("Content-Type","application/octet-stream;");
            response.setHeader("Content-Encoding", "gzip");
            response.setHeader("Content-Disposition", "filename=\""+fName+"\"");

            BufferedInputStream in=new BufferedInputStream (new FileInputStream (getServletContext().getRealPath("/")+"\\docs\\keyw.rar"));

            GZIPOutputStream out1 = new GZIPOutputStream(response.getOutputStream());
            BufferedOutputStream binout=new BufferedOutputStream(out1);
...
передача файла


Но, если задавать дополнительный хидер ("Content-Encoding", "gzip"), тогда браузер не понимает хидер ("Content-Disposition", "filename=\""+fName+"\"") (тестировал на ie).

Вместо того чтобы предлагать пользователю открыть или сохранить передаваемый ворд, он предлагает только сохранить файл с названием моей jsp - getDocFile.jsp.

Помогите мне решить эту задачу - хочу и паковать, и чтобы браузер понимал что передается файл MSWord
PM MAIL   Вверх
kkorsakoff
Дата 11.9.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Надо выставить Content-Type. Не application/octet-stream, а вордовский. На память не помню, но что-то вроде application/vnd.ms-word.
Браузер именно по этому заголовку определяет тип файла.

И Content-Dis­position должен быть

"Content-Dis­position : attachment; filename=fName"

Это сообщение отредактировал(а) kkorsakoff - 11.9.2006, 17:46
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.