Javascript проверки размера файла на стороне клиента - PullRequest
0 голосов
/ 19 июня 2011

Когда я выбираю файл размером более 50 МБ для загрузки, мой сервер JBoss выдает исключение, а JSP зависает.Таким образом, вместо проверки размера файла на стороне сервера Java, я должен проверить его на стороне клиента.Но я не могу найти подходящего подхода к этому.Кто-нибудь может мне помочь в этом?Я не могу использовать какую-либо функцию флэш-загрузки.

1 Ответ

2 голосов
/ 19 июня 2011

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

Что касается конкретной проблемы, то это звучит так, как будто вы анализируете загруженный файл внутри JSP файла вместо обычного класса Java ( Servlet ). Поскольку JSP является частью технологии просмотра ответа HTTP, любое исключение, которое было выдано на полпути вывода JSP, сервер больше не может преобразовать в ответ HTTP в страницу ошибки. Скорее всего, клиент получит пустую страницу с полупеченным исходным кодом HTML, поскольку вывод JSP был внезапно прерван.

Чтобы это исправить, вы должны избегать кода Java в файлах JSP и вместо этого помещать код Java в обычные классы Java. В этом конкретном случае вы хотите использовать сервлет . Пусть форма отправляется на сервлет вместо JSP.

<form action="uploadServlet" method="post">

Вот пример того, как должен выглядеть его doPost() метод:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        // Parse file upload.

        // At end, forward request/response to JSP to present results in HTML.
        request.getRequestDispatcher("/WEB-INF/results.jsp").forward(request, response);
    } catch (FileUploadException e) { // Or whatever exception it is throwing.
        throw new ServletException("File upload failed", e);
    }
}

Таким образом, исключение закончится страницей ошибки HTTP 500 по умолчанию, которую вы можете настроить следующим образом: web.xml в любом случае

<error-page>
    <exception-type>com.something.FileUploadException</exception-type>
    <location>/someFileUploadErrorPage.jsp</location>
</error-page>

В качестве альтернативы, вместо выдачи ServletException, вы также можете просто установить сообщение об ошибке в качестве атрибута и переслать в тот же JSP и позволить ему отображать ошибку в удобной для пользователя форме в той же форме. Вы можете получить общую идею на нашей вики-странице сервлета .

...