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

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

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

    karapuz Гость

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

    vovchik Гость

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

    Shurup Гость

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

    karapuz Гость

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

    Shurup Гость

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

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



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

    karapuz Гость

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


    Код (Text):
          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<---- ????
    не забываем юзать тэг
    Код (Text):
    [/b]
     
  7. Shurup

    Shurup Гость

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

    karapuz Гость

    Главное что работает)
     
Загрузка...
Статус темы:
Закрыта.

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