从表单获取上传的图像作为字节数组

时间:2017-11-08 20:37:17

标签: jsp servlets file-upload

我有一个JSP / Servlet应用程序,其中包含一个包含多个部分的表单。

客户方:

        out.println("<form action='cbehindRegister_submit.php' method='post'enctype=\"multipart/form-data\">");
        out.println("<table>");
        out.println("<tbody>");
        out.println("<tr>");
        out.println("<td><label>Username: </label></td>");
        out.println("<td><input type='text' required id='input_username' name='input_username'/></td>");
        out.println("<td><label id='valusername' class='val'> </label></td>");
        out.println("</tr>");

        out.println("<tr>");
        out.println("<td><label>Country: </label></td>");
        out.println("<td><input type='text' required id='input_country' name='input_country'/></td>");
        out.println("<td><label id='valcountry' class='val'> </label></td>");
        out.println("</tr>");

        out.println("<tr>");
        out.println("<td><label>Profile picture: </label></td>");
        out.println("<td><input type='file' required id='input_profile_picture' name='input_profile_picture' accept='image/x-png,image/gif,image/jpeg' /></td>");
        out.println("<td><label id='valprofile_picture' class='val'> </label></td>");
        out.println("</tr>");

        out.println("<tr>");
        out.println("<td><label>Birth date: </label></td>");
        out.println("<td><input type='date' required id='input_birth_date' name='input_birth_date' /></td>");
        out.println("<td><label id='valbrith_date' class='val'> </label></td>");
        out.println("</tr>");

        out.println("<tr>");
        out.println("<td><label>Password: </label></td>");
        out.println("<td><input type='password' required id='input_password' name='input_password' /></td>");
        out.println("<td><label id='valpassword' class='val'> </label></td>");
        out.println("</tr>");

        out.println("<tr>");
        out.println("<td><label>Verify password: </label></td>");
        out.println("<td><input type='password' required id='input_verifypassword' name='input_verifypassword' /></td>");
        out.println("<td><label id='valverifypassword' class='val' > </label></td>");
        out.println("</tr>");

        //request
        out.println("<tr>");
        out.println("<td height='45px' colspan='3'><input type='submit' id='submit' value='Registreer' id='regsubmit' /></td>");
        out.println("</tr>");

        out.println("</tbody>");
        out.println("</table>");
        out.println("</form>");

问题是如何将文件作为字节数组上传,以便将其作为blob存储在数据库中?

无论如何以相似的方式获取文件  如

File file =  request.getParameter("nameOfFormParameter");

byte[] image =  request.getParameter("nameOfFormParameter");

互联网上的大多数指南都是用来存储服务器上的文件。

编辑1:与文件上传相关的大多数问题都提供了一种解决方案,可以将文件存储在磁盘上,而不会处理内存中的文件。这个问题的目的是找到一个解决方案,在内存中处理上传的文件而不将文件直接写入磁盘,但将它们存储在数据库中。

1 个答案:

答案 0 :(得分:0)

搜索了大约2天后,我终于找到了答案:

<强>首先

在表单标记中添加enctype = \“multipart / form-data \,以便结果为:

<form action='cbehindRegister_submit.php' method='post'enctype=\"multipart/form-data\">

其次

使用以下代码行接收文件(确保表单的输入标记的名称与getPart函数中的字符串相同):

Part filePart = request.getPart("input_profile_picture");

第三

从filePart创建输入流并将输入流转换为字节数组

InputStream filecontent = filePart.getInputStream();
byte[] fileAsByteArray = IOUtils.toByteArray(filecontent);

现在,图像已经准备好了!