Java Socket Server с HTML-формой Загрузка файла - PullRequest
0 голосов
/ 17 октября 2019

Я тоже пытаюсь сделать Java-сервер HTML, который позволяет пользователям загружать файлы. Я не хочу слишком использовать Tomcat или любую другую библиотеку. У меня уже работает мой код, позволяющий браузерам подключать его тоже. Однако я не могу понять, как получить файл, загруженный из HTML-формы.

                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                out.println("<html>NEXT PAGE</html>");
                System.out.println(response);

                response = readLine(socket);
                System.out.println(response);

                receiveFile(new File("/home/user/Downloads/blla.html"));

//THE FUNCTIONS

public String readLine(Socket socket)throws IOException{
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    String inputLine, builder = "";
    while(!(inputLine = in.readLine()).equals("")){
        builder += inputLine+"\r\n";
    }

    return builder+"\r\n";
}

public void receiveFile(File file){
    try{
        InputStream in = socket.getInputStream();
        FileOutputStream out = new FileOutputStream(file.getPath());

        byte[] buffer = new byte[4096];
        int length;
        while((length = in.read(buffer)) != -1){
            out.write(buffer, 0, length);
        }

        out.flush();
        out.close();

    }catch(Exception e){
        e.printStackTrace();
    }
}

Вот моя HTML-форма для загрузки файла.

        <form action='/u' method="post" enctype="multipart/form-data">
            Select image to upload:
            <input type="file" name="fileToUpload" id="fileToUpload">
            <input type="submit" value="Upload Image" name="submit">
        </form>
  • ОБНОВЛЕНИЕ - я понял, что BufferedReader буферизирует часть вывода содержимого POST. Так что теперь я просто использую входной поток и читаю содержимое, а затем добавляю часть POST тоже в файл. Однако теперь файл кажется слишком большим на 3 КБ, я также смог проанализировать последний бит POST, который содержал бит конца пакета.
...