【问题标题】:Get uploaded image from form as byte array [duplicate]从表单中获取上传的图像作为字节数组[重复]
【发布时间】:2017-11-08 20:37:17
【问题描述】:

我有一个 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:大多数与文件上传相关的问题都提供了一种解决方案,将文件存储在磁盘上,而不处理内存中的文件。这个问题的目的是找到一个解决方案,在内存中处理上传的文件,而不是将文件直接写入磁盘,而是将它们存储在数据库中。

【问题讨论】:

    标签: jsp servlets file-upload


    【解决方案1】:

    搜索了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);
    

    现在,图像已准备好被 blob!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2012-06-07
      • 2016-09-20
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多