Save and Download byte data from MySQL and PostgreSQL using Java Servlet
In this article, we will seen how to convert file to byte array and save into Postgres and Mysql database. After that we also seen how to download saved file in database using file download dialog box.
1. Upload or Save file into database
For saving file into database, we will perform following steps :
- First we will get inputStream from HttpServletRequest and store into InputStream.
- Convert InputStream to byte array.
- Store byte array to particular column into database.
Using following approach we can Convert InputStream to Byte array in java
1. Using Apache Commons IO library
InputStream content = request.getInputStream();
byte[] bytes = IOUtils.toByteArray(content);
content.close();
2. Using ByteArrayOutputStream
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = content.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
byte[] fileData = buffer.toByteArray();
3. Using Java 9
InputStream content = request.getInputStream();
byte[] fileData = content.readAllBytes();
After converting InputStream to Byte[] array, we can set into our byte variable.
2. Save byte[] array into Database
We can use BLOB datatype in MySql and BYTEA datatype in Postgres for persist byte data.
MySql :
CREATE TABLE FILE_DEMO (
ID INT(5),
FILE_DATA BLOB
);
Postgres :
CREATE TABLE FILE_DEMO (
ID INT(5),
FILE_DATA BYTEA
);
3. Download file using Servlet
Now we will convert Byte array data to Inputstream and download file. Lets see code for that.
// Get byte array from DataBase and pass into ByteArrayInputStream
InputStream inStream = new ByteArrayInputStream(BYTE_ARRAY_FROM_DB);
// .pdf => application/pdf
// .txt => text/plain
// .zip => application/zip
String mimeType = "application/pdf";
response.setContentType(mimeType);
response.setContentLength((int) BYTE_ARRAY_FROM_DB.length);
response.setHeader("Content-Disposition", "attachment; filename=\"FILE_NAME\"");
OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
inStream.close();
outStream.close();
After run this code, It will open download dialog box and you can download wherever you want to.
In this article, we have seen how to convert input stream data to byte array and then save into database.
And then how to convert saved byte array into InputStream and download as File.
Happy Coding... Happy Learning...
Other articles you may like :
Comments
Post a Comment