Я тоже пытаюсь сделать 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, который содержал бит конца пакета.