singlepost

Java Servlet: Организация временной ссылки на файл << На главную или назад  

Надо организовать временную ссылку на файл на сервере для скачивания. Проблема в том что когда просто в тупую закидываю файл Upload на сервер ссылка на не не пашет и выдаёт ошибку. Если даже в ручную создать опубликованную директорию на сервере то через NetBeans то файлы будут доступны всё время и к тому же новые загружены файлы не будут проиндексированы(не получают ссылок на себя). Как то же решают эти проблемы?

139 ответов в теме “Java Servlet: Организация временной ссылки на файл”

  1. 38
    Лёха Воронин ответил:

    (^-^)

  2. 37
    Andrey Burlutskiy ответил:

    Читай больше документации и книг. И исправься в выражении своих мыслей в письменном виде.
    Потратили уйму на тебя времени, чтобы понять, что ты там накалякал=)

  3. 36
    Лёха Воронин ответил:

    Ещё раз спасибо=) Я вообще Java не моё… это в универе я её изучаю. Я системный программист, там я более осведомлённый))))

  4. 35
    Andrey Burlutskiy ответил:

    Удачи на защите=)
    Больше не могу – спать хочу…

  5. 34
    Andrey Burlutskiy ответил:

    >та вы вообще не там копаете!

    туда туда…

    >ссылка правильная… и всё пашет.

    Про ссылку я ничего и не говорил – Ссылка правильная…

    >только новые загруденные файлы не
    >пашут! если перезагрузить проект то опять всё станет на свои места, >если конечно просмотреть каталог через NetBeans ещё раз. А так тоже >самое((((((

    Вот именно… после передеплоя он подложит файлы из проекта, которые ты туда залил, в папку где храняться задеплоенные приложение.

    Прочитай про процесс компиляции, сборки, деплоя j2ee приложений. И как это реализовано в Net Beans.

  6. 33
    Andrey Burlutskiy ответил:

    Что значит зачем? Сам же написал – рекурсивного обхода каталогов!!!!

  7. 32
    Лёха Воронин ответил:

    Йолки палки! Как я не догнал это! Спасибо!!! Ты мне глаза открыл!!! А болбес далбаюсь с этим)))))))

  8. 31
    Andrey Burlutskiy ответил:

    Сессия прошла, а ты всё курсовую доделаешь?

  9. 30
    Лёха Воронин ответил:

    Та вот это фигня осталась и всё! А препод завалил всех в Универе со своими постоянно изменяющиемеся требованиями… вот так бывает в жизни.

  10. 29
    Лёха Воронин ответил:

    та вы вообще не там копаете! ссылка правильная… и всё пашет. только новые загруденные файлы не пашут! если перезагрузить проект то опять всё станет на свои места, если конечно просмотреть каталог через NetBeans ещё раз. А так тоже самое((((((

  11. 28
    Andrey Burlutskiy ответил:

    и никакой я у Вас рекурсии там и не вижу этой папки!! Где рекурсия??

  12. 27
    Лёха Воронин ответил:

    зачем? в папке кроме изображение не чего не должно быть! а первый вход для для обхода пользовательских папок. это здесь не причём.

  13. 26
    Andrey Burlutskiy ответил:

    >Я знаю что сам GlassFish индексирует файлы в каталоге
    Можно узнать откуда Вы это узнали?

  14. 25
    Лёха Воронин ответил:

    Ну чкстно говоря это не временная дериктория а постоянная, да и файлы в ней остаються на всегда… НЕ понимаю к чему вы ведёте?

  15. 24
    Лёха Воронин ответил:

    Я просто указал что папка видна для публичного просмотра и всё что в ней и файлы сразу стали доступны для публичного просмотра в ней. – это и был процес индексации… но новые файлы которые загрузились динамически а не копирование мышкой – не отображаются((( Про индексирование я узнал от своего препода!

  16. 23
    Andrey Burlutskiy ответил:

    блин….

    вы, наверняка, генерируете вот такую вот ссылку на Вашу картинку:

    <img src="/images/upload_file.gif"/>

    только вот эта папка /images/ во время runtime нихера не соответствует вот этой:
    C:/Documents and Settings/lyoha/Мои документы/NetBeansProjects/Kursach/Kursach-war/web/images/

  17. 22
    Леонид Максимов ответил:

    меня терзают смутные сомнения:

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {

    } finally {
    out.close();
    }
    }

  18. 21
    Andrey Burlutskiy ответил:

    =) тут такого много=)

  19. 20
    Лёха Воронин ответил:

    это курсовой проект)))) всего одна ерунда осталась… и не знаю кто может посоветовать как её решить.

  20. 19
    Andrey Burlutskiy ответил:

    ….

    Сразу оговарюсь и скажу, что за Вас это делает MultipartRequest. Вы ему прописали в конструкторе путь к ВРЕМЕННОМУ хранению загруженных файлов, который парсит http запрос и сохраняет в эту папку найденные в запросе файлы. И дальше Вы с этими файлами ничего не делаете…. Что Вы хотели от этого?

    С чего Вы взяли, что вот эта папка "C:/Documents and Settings/lyoha/РњРѕРё документы/NetBeansProjects/Kursach/Kursach-war/web/images/" соответствует папке "images" задеплоенному на GlassFish?

    1ых, нельзя пользоваться абсолютными путями. Можно,но это принесйт Вам кучу проблем, с одной из которых Вы только что столкнулись
    2ых, папка ваша, куда MultipartRequest сохраняет загруженные ваши файлы соответствует исходникам вашего проекта, а не папке куда деплоится ваше приложение.

  21. 18
    Лёха Воронин ответил:

    в этом коде я уверен на все 100% что пашет!

    Я знаю что сам GlassFish индексирует файлы в каталоге для того что б опубликовать на них ссылки. Это делаеться автоматически когда через NetBeans просматриваю ту папку. Но мне нужно это делать динамически когда принимаю их через сервлет. Должны быть какие то функции или API от GlassFish. Есть документация по нему на официальном сайте но проитать её не реально для меня((((

  22. 17
    Andrey Burlutskiy ответил:

    >Щас кинут рабочий…
    По-моему это не Вы писали…. Может для начало Вам надо в нём разобраться?

  23. 16
    Леонид Максимов ответил:

    два вопроса:
    1. сервлет, строящий список файлов, находит новые файлы?
    2. HTTP GET что-нибудь получает по адресу свежезагруженного файла?

  24. 15
    Andrey Burlutskiy ответил:

    1. Зачем так?
    String name = (String)en.nextElement();
    File h2 = mpr.getFile(name);
    File h = mpr.getFile("file_up");
    А так что не подойдет:
    String name = (String)en.nextElement();
    File h2 = mpr.getFile(name);
    2. Что-то не нашел строчки кода где бы Вы сохраняли загруженнЫЕ файлы в определенной папке……..

    Сразу оговарюсь и скажу, что за Вас это делает MultipartRequest. Вы ему прописали в конструкторе путь к ВРЕМЕННОМУ хранению загруженных файлов, который парсит http запрос и сохраняет в эту папку найденные в запросе файлы. И дальше Вы с этими файлами ничего не делаете…. Что Вы хотели от этого?

    С чего Вы взяли, что вот эта папка "C:/Documents and Settings/lyoha/РњРѕРё документы/NetBeansProjects/Kursach/Kursach-war/web/images/" соответствует папке "images" задеплоенному на GlassFish?

  25. 14
    Лёха Воронин ответил:

    Ой я извеняюсь… я старый проект выписал(((((
    Щас кинут рабочий…

  26. 13
    Лёха Воронин ответил:

    Вот код сервлета который принимает файл:

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    import com.oreilly.servlet.*;
    /**
    *
    * @author lyoha
    */
    public class Upload extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {

    } finally {
    out.close();
    }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    UserAdmin user = new UserAdmin(request.getCookies(), response);

    user.inLogin("sa", "sa");
    if(user.CheckUser()>0)
    {
    MultipartRequest mpr = new MultipartRequest(request, "C:/Documents and Settings/lyoha/Мои документы/NetBeansProjects/Kursach/Kursach-war/web/images/"+user.login_us, 1024*5*1024);
    Enumeration en = mpr.getFileNames();

    while(en.hasMoreElements())
    {
    String name = (String)en.nextElement();
    File h2 = mpr.getFile(name);
    File h = mpr.getFile("file_up");
    }
    response.sendRedirect("MainServlet");
    }
    processRequest(request, response);
    }

    /**
    * Returns a short description of the servlet.
    * @return a String containing servlet description
    */
    @Override
    public String getServletInfo() {
    return "Short description";
    }// </editor-fold>

    }

  27. 12
    Лёха Воронин ответил:

    Вот код формы отправителя, вернее код метода сервлета который это делает:

    void UploadFile(PrintWriter out)
    {
    out.print("<form method='POST' enctype='multipart/form-data' action='Upload'><table border='1'><tr><td>");
    out.print("Upload file:<br><input type='file' name='file_up'><br><input type='submit' name='sender'>");
    out.print("</td></tr></table></form>");
    }

  28. 11
    Лёха Воронин ответил:

    А метод поиска файла:

    int SearchFiles(PrintWriter out, String name, int point)
    {
    int count=0;
    File file = new File("C:/Documents and Settings/lyoha/Мои документы/NetBeansProjects/Kursach/Kursach-war/web/images");
    File files[];
    File files2[];
    try
    {
    if(file.isDirectory())
    {
    files = file.listFiles();

    for(int i=0;i<files.length;i++)
    {
    if(files[i].isDirectory())
    {
    files2 = files[i].listFiles();
    for(int j=0;j<files2.length;j++)
    {
    if(files2[j].getName().indexOf(name)!=-1)
    {
    if(point*10-count>=0 && point*10-count<10)
    {
    out.print("<table border=1>");
    out.print("<tr><td><img src='"+"images/"+files[i].getName()+"/"+files2[j].getName()+"'></td></tr><tr><td>"+files2[j].getName()+"</td></tr><tr><td>Автор:"+files[i].getName()+"</td></tr>");
    out.print("</table><br><br>");
    }
    count++;
    }
    }
    }

    }
    if(count>=10)
    for(int h=1;h<=(count/10)+1;h++)
    if(h!=point)
    out.print("<a href='MainServlet?search=search&file_search="+name+"&param1="+h+"'> -"+h+ "- </a> ");
    else
    out.print("<font color='black'> -"+h+ "- </font> ");
    }

    out.print("<br><br><font color='red' size='3'>Найдено файлов: "+count+".</font>");
    }
    catch(Exception e)
    {
    }
    return count;
    }

    П.С.: не обращайте внимание на Кириллицу, она у меня в норме))))

  29. 10
    Лёха Воронин ответил:

    Это код формы что загружает файл:

    <form method='POST' enctype='multipart/form-data' action='Upload'>
    <table border='1'>
    <tr><td>
    Upload file:<br><input type='file' name='file_up'>
    <br>
    <input type='submit' name='sender'>
    </td></tr>
    </table>
    </form>

    Это код сервлет который принимает файл:

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;
    import com.oreilly.servlet.*;
    /**
    *
    * @author lyoha
    */
    public class Upload extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {

    } finally {
    out.close();
    }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    /**
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    * @throws ServletException if a servlet-specific error occurs
    * @throws IOException if an I/O error occurs
    */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    UserAdmin user = new UserAdmin(request.getCookies(), response);

    user.inLogin("sa", "sa");
    if(user.CheckUser()>0)
    {
    MultipartRequest mpr = new MultipartRequest(request, "C:/Documents and Settings/lyoha/Мои документы/NetBeansProjects/Kursach/Kursach-war/web/images/"+user.login_us, 1024*5*1024);
    Enumeration en = mpr.getFileNames();

    while(en.hasMoreElements())
    {
    String name = (String)en.nextElement();
    File h2 = mpr.getFile(name);
    File h = mpr.getFile("file_up");
    }

    }
    processRequest(request, response);
    }

    /**
    * Returns a short description of the servlet.
    * @return a String containing servlet description
    */
    @Override
    public String getServletInfo() {
    return "Short description";
    }// </editor-fold>

    }

  30. 9
    Лёха Воронин ответил:

    это метод сервлета который ищит файл на диске:

    int SearchFiles(PrintWriter out, String name, int point)
    {
    int count=0;
    File file = new File("C:/Documents and Settings/lyoha/Мои документы/NetBeansProjects/EnterpriseApplication1/EnterpriseApplication1-war/web/images");
    File files[];
    File files2[];
    try
    {

    if(file.isDirectory())
    {
    files = file.listFiles();

    for(int i=0;i<files.length;i++)
    {
    if(!files[i].isDirectory())
    {
    if(files[i].getName().indexOf(name)>-1)
    {
    if(point*10-count>=0 && point*10-count<10)
    {
    out.print("<table border=1>");
    out.print("<tr><td><img src='"+"images/"+files[i].getName()+"'></td></tr><tr><td>"+files[i].getName()+"</td></tr><tr><td><font color='green'>Автор: root</font></td></tr>");
    out.print("</table><br><br>");
    }
    count++;
    /**/}
    }
    else
    {
    files2 = files[i].listFiles();
    for(int j=0;j<files2.length;j++)
    {
    if(files2[j].getName().indexOf(name)!=-1)
    {
    if(point*10-count>=0 && point*10-count<10)
    {
    out.print("<table border=1>");
    out.print("<tr><td><img src='"+"images/"+files[i].getName()+"/"+files2[j].getName()+"'></td></tr><tr><td>"+files2[j].getName()+"</td></tr><tr><td>Автор:"+files[i].getName()+"</td></tr>");
    out.print("</table><br><br>");
    }
    count++;

    }
    }
    }
    }
    if(count>=10)
    for(int h=1;h<=(count/10)+1;h++)
    if(h!=point)
    out.print("<a href='MainServlet?search=search&file_search="+name+"&param1="+h+"'> -"+h+ "- </a> ");
    else
    out.print("<font color='black'> -"+h+ "- </font> ");
    }

    out.print("<br><br><font color='red' size='3'>Найдено файлов: "+count+".</font>");
    }
    catch(Exception e)
    {
    }
    return count;
    }

    Кирилица на самом деле в порядке, не оброщайте внимание на "зюзюки"))))

  31. 8
    Andrey Burlutskiy ответил:

    после долгого анализа текста…
    В догонку к первому:

    Распишите структуру каталогов вашего проекта!
    Где располагется папка куда вы изначально кладете файлы перед сборкой проекта? ("если закидываю файл просто на сервер")
    Покажите в структуре где располагется папка в которую смотрит сервлет?
    ("сервлет который даёт ссылки на флы на сервере")
    Покажите код сервлета в котором происходит обращение к данной папке.
    Где располагается папка куда загружаются (upload) файлы?
    Покажите код образования ссылки на файлы вашего сервлета! (даёт так же ссылку на новый файл но она не пашет)

  32. 7
    Лёха Воронин ответил:

    да дело на самом деле обстаит так:
    все файлы которые я забрасываю – картинки.
    есть Сервлет обрабатывает принятый файл – он сохраняет его на жёсткий диск в директорию с файлами. Сама дериктория опубликована для просмотра!
    есть сервлет который его отправляет.
    они работают корректно.
    есть ещё сервлет который по результам запроса отображает список и сами картинки. поиск удаёться – выводит полный список всех файлов на сервере но изображение загруженного файла не получаю. подозреваю что GlassFish просто не даёт ссылку на него. как только я останавливаю работу проэкта – и начинаю рыться в папке с изображениями через NetBeans так сразу нахожу его.
    Запускаю по новой Deploy Project, затем Run… и на сайте есть уже все картинки! Вот зараза))))
    Надо что б оно сразу его индексировала для доступа из вне.

  33. 6
    Andrey Burlutskiy ответил:

    присоединяюсь к Леонид maxleo Максимов – ничего не понятно, что Вы говорите. Какой то набор слов, несвязанных высказываний в перемешку со словами upload, сервер, ссылка, ошибка, netbeans. А да… ещё и Java =)

    если не можете описывать ошибку, так ЗАЧЕМ других мучаете – ОПУБЛИКУЙТЕ ЕЁ ЗДЕСЬ! Не можете описать компонент – ОПУБЛИКУЙТЕ ОСНОВНУЮ ЧАСТЬ ИСХОДНОГО КОДА ЗДЕСЬ!

  34. 5
    Леонид Максимов ответил:

    > если закидываю файл просто на сервер.

    не понятно. кто закидывает? как закидывает? куда закидывает? что в этому случае происходит?

    > сервлет который даёт ссылки на флы на сервере(он их просто перечисляет за щёт рекурсивного обхода каталогов) даёт так же ссылку на новый файл – но она не пашет!

    как не пашет? почему не пашет? как это выглядит?

    > Если даже в ручную создать опубликованную директорию на сервере то через NetBeans то файлы будут доступны всё время и к тому же новые загружены файлы не будут проиндексированы(не получают ссылок на себя).

    при чем здесь это? как это вообще понять можно? где запятые?

    проведите синтаксический анализ опубликованных вами предложений.

  35. 4
    Лёха Воронин ответил:

    если закидываю файл просто на сервер. а сервлет который даёт ссылки на флы на сервере(он их просто перечисляет за щёт рекурсивного обхода каталогов) даёт так же ссылку на новый файл – но она не пашет!

  36. 3
    Леонид Максимов ответил:

    а в чем проблема?

    > в тупую закидываю файл Upload на сервер
    это как?

    > ссылка на не не пашет и выдаёт ошибку
    спорное утверждение.

    >новые загружены файлы не будут проиндексированы(не получают ссылок на себя)
    не понятно ни разу.

  37. 2
    Гена Жукофффф ответил:

    есть такая штука – php называться))))))))))))))))

  38. 1
    Лёха Воронин ответил:

    мне надо на Java.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.