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

Тема в разделе "Java", создана пользователем karapuz, 28 авг 2006.

Статус темы:
Закрыта.
  1. karapuz

    karapuz Гость

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

    vovchik Гость

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

    Shurup Гость

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

    karapuz Гость

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

    Shurup Гость

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

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



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

    karapuz Гость

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


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

    Shurup Гость

    Репутация:
    0
    ужос, вынеси всю логику в отдельные классы и методы..
    доставай респонз в однмо месте и передавай его модели, в модели используй утилитный класс для передачи файла, работающий уже с outputStream и т.д.
     
  8. karapuz

    karapuz Гость

    Репутация:
    0
    Главное что работает)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей