Загрузка файла PDF

Я хочу загрузить файл PDF с помощью кода, приведенного ниже. Это дает возможность просмотра, но не загружать файл. Когда я нажимаю кнопку sendfile, отображается ее кодовая страница uploadfile.html. Как я могу это сделать??? где ошибка в данном коде???

Имя файла-upload.html

<%@ page language="java" %>
<HTml>
<HEAD><TITLE>Display file upload form to the user</TITLE></HEAD>  
<% //  for uploading the file we used Encrypt type of multipart/
form-data and input of file type to browse and submit the file %>
  <BODY> <FORM  ENCTYPE="multipart/form-data" ACTION=
"uploadfile.html" METHOD=POST>
        <br><br><br>
      <center><table border="2" >
                    <tr><center><td colspan="2"><p align=
"center"><B>PROGRAM FOR UPLOADING THE FILE</B><center></td></tr>
                    <tr><td><b>Choose the file To Upload:</b>
</td>
                    <td><INPUT NAME="F1" TYPE="file"></td></tr>
                    <tr><td colspan="2">
<p align="right"><INPUT TYPE="submit" VALUE="Send File" ></p></td></tr>
             <table>
     </center>      
     </FORM>
</BODY>
</HTML>

Имя файла - uploadfile.html

<%@ page import="java.io.*" %>
<%
    //to get the content type information from JSP Request Header
    String contentType = request.getContentType();
    //here we are checking the content type is not equal to Null and
 as well as the passed data from mulitpart/form-data is greater than or
 equal to 0
    if ((contentType != null) && (contentType.indexOf("multipart/
form-data") >= 0)) {
        DataInputStream in = new DataInputStream(request.
getInputStream());
        //we are taking the length of Content type data
        int formDataLength = request.getContentLength();
        byte dataBytes[] = new byte[formDataLength];
        int byteRead = 0;
        int totalBytesRead = 0;
        //this loop converting the uploaded file into byte code
        while (totalBytesRead < formDataLength) {
            byteRead = in.read(dataBytes, totalBytesRead, 
formDataLength);
            totalBytesRead += byteRead;
            }

        String file = new String(dataBytes);
        //for saving the file name
        String saveFile = file.substring(file.indexOf("filename=\
"") + 10);
        saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
        saveFile = saveFile.substring(saveFile.lastIndexOf("\\")
 + 1,saveFile.indexOf("\""));
        int lastIndex = contentType.lastIndexOf("=");
        String boundary = contentType.substring(lastIndex + 1,
contentType.length());
        int pos;
        //extracting the index of file 
        pos = file.indexOf("filename=\"");
        pos = file.indexOf("\n", pos) + 1;
        pos = file.indexOf("\n", pos) + 1;
        pos = file.indexOf("\n", pos) + 1;
        int boundaryLocation = file.indexOf(boundary, pos) - 4;
        int startPos = ((file.substring(0, pos)).getBytes()).length;
        int endPos = ((file.substring(0, boundaryLocation))
.getBytes()).length;

        // creating a new file with the same name and writing the 
content in new file
        FileOutputStream fileOut = new FileOutputStream(saveFile);
        fileOut.write(dataBytes, startPos, (endPos - startPos));
        fileOut.flush();
        fileOut.close();

        %><Br><table border="2"><tr><td><b>You have successfully
 upload the file by the name of:</b>
        <% out.println(saveFile); %></td></tr></table> <%
        }
%>

1 ответ

Это явно фрагмент кода Roseindia. Прежде всего, это худший учебный ресурс за всю историю. Не используйте это. Он учит только плохим практикам. Добавьте этот сайт в свой черный список. На самом деле, любой "учебный" сайт, который изобилует рекламными баннерами и безнадежно устаревшими фрагментами кода низкого качества, явно поддерживается любителями, уделяющими основное внимание доходам от рекламы, а не серьезному обучению. Другими примерами таких дерьмовых "обучающих" сайтов являются javabeat, tutorialspoint, journaldev, javatpoint и т. Д. Замечательная распространенная вещь, которую имеют эти сайты, это то, что они возникли в Индии.

Помимо того, что вы неправильно использовали .html расширение файла вместо .jsp (хотя они правильно представили свои примеры с .jsp расширений), во фрагменте кода есть несколько серьезных проблем:

  • HTML использует теги верхнего регистра в стиле 90-х. Это не рекомендуется.
  • HTML использует <font> а также <center> теги, которые устарели с 1998 года.
  • Бизнес-логика смешана с логикой представления в одном файле JSP. Код Java принадлежит классу Java, а не файлу JSP.
  • Парсер полагается на Content-Length заголовок запроса, который не всегда присутствует сам по себе. Если этот заголовок отсутствует, код нарушается.
  • Парсер создает байтовый массив такой длины. Это может привести к сбою сервера, если длина содержимого превышает доступную память сервера.
  • Парсер создает String на основе байтового массива с использованием кодировки символов по умолчанию для серверной платформы вместо той, которая указана в заголовке из нескольких частей. Это может привести к повреждению / повреждению результирующих байтов.
  • DataInputStream Оболочка не нужна, код не пользуется ею.
  • Так далее..
  • Так далее..

Это просто ужасно.


Правильный способ загрузить файл из JSP - это отправить форму @MultipartConfig аннотированный класс сервлета, а затем использовать request.getPart() чтобы получить файл. Вы можете найти фрагмент в этом ответе: Как загрузить файлы на сервер, используя JSP/Servlet?

Правильный способ изучения Java EE раскрывается в следующем ответе: веб-разработка Java EE, с чего начать и какие навыки мне нужны?

Другие вопросы по тегам