ank5
asked on
Receive file in Servlet
I have to write a Servlet which will get a zip file from the client. Servlet is expected to write the file to the filesystem.
I am using Postman to simulate the request
Below is my Servlet code
This gives me the below error
What would be the correct way to receive file from the client and save it on the server?
Thank you
I am using Postman to simulate the request
Below is my Servlet code
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String payloadRequest = getBody(request).toString();
File saveFile = new File(SAVE_DIR + "abc.zip");
InputStream inputStream = request.getInputStream();
FileOutputStream outputStream = new FileOutputStream(saveFile);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
System.out.println("Receiving data...");
int len = inputStream.read(buffer);
System.out.println("Length - " + len);
while (len != -1) {
outputStream.write(buffer, 0, len);
len = inputStream.read(buffer);
}
System.out.println("Data received.");
outputStream.close();
inputStream.close();
System.out.println("File written to: " + saveFile.getAbsolutePath());
response.getWriter().print("UPLOAD DONE");
}
catch (Exception e) {
e.printStackTrace();
}
}
public static String getBody(HttpServletRequest request) throws IOException {
String body = null;
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
body = stringBuilder.toString();
return body;
}
This gives me the below error
java.io.IOException: Stream closed
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:312)
at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:167)
at com.emc.stream.servlets.UploadParcels.doPost(UploadParcels.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
What would be the correct way to receive file from the client and save it on the server?
Thank you
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.