使用servlet,ajax,jquery将图像发送到mySQL

时间:2015-03-01 23:10:23

标签: java ajax servlets jdbc

尝试将文件上传到我的servlet而不用ajax刷新页面。

现在已经坚持了好几天了,只是不能放手。

我的表格:

<form method="POST" id="changeImage2" enctype="multipart/form-data">
    <input type="file" name="photo"  /> <br> 
    <input type="button" value="Change Picture" id="changeImage1">
</form>

我的servlet:

@MultipartConfig
public class changeImage extends HttpServlet{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        resp.setContentType("text/html");  
        PrintWriter out = resp.getWriter();      

        Part filePart = req.getPart("photo");

        Object email = req.getSession().getAttribute("email");
        Object name = req.getSession().getAttribute("name");

        try{

            Class.forName("com.mysql.jdbc.Driver");

            Connection myConn = DriverManager.getConnection("", "", "");

            PreparedStatement ps = myConn.prepareStatement("update user set profilePicture=? where email=? and name=?");

            ps.setBlob(1, filePart.getInputStream());
            ps.setString(2, (String) email);
            ps.setString(3, (String) name);         
            ps.executeUpdate();

        } catch (Exception e){
            e.printStackTrace();
        }
    }
}  

我的ajax / jquery:

<script>
    $(document).ready(function() {
        $('#changeImage1').click(function() {
            var dataForm = $('#changeImage2').serialize();
            $.ajax({
                type : 'POST',
                url : 'changeImage',
                data : dataForm,
                success : function(data) {
                    $('#gg1').text(data);
                },
                error : function() {
                    $('#gg1').text("Fail");
                },
            });
        });
    });
</script>

运行时我收到错误:

  

SEVERE:servlet [changeImage]的Servlet.service()与上下文有关   路径[/ Event]引发了异常   [org.apache.tomcat.util.http.fileupload.FileUploadBase $ InvalidContentTypeException:   请求不包含multipart / form-data或   multipart / form-data stream,content type header为null] with root   原因   org.apache.tomcat.util.http.fileupload.FileUploadBase $ InvalidContentTypeException:   请求不包含multipart / form-data或   multipart / form-data流,内容类型标头为空

我尝试使用另一种形式,没有ajax / jquery:

<form action="changeImage" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" /> 
    <input type="submit" value="Change Picture" />
</form>

有了它,它有效。所以我猜测JDBC和Servlet是正确的。并且我没有正确使用Ajax / Jquery。

2 个答案:

答案 0 :(得分:2)

在你的代码中写道:

ps.setBlob(5, (Blob) InputStream);

根据javadoc对于PreparedStatement这个int,5是参数索引。由于错误说明你只有3个参数。

您需要将此更改为3吗? - 查看你的SQL语句我认为你可能已经忘记了你已经从某个地方复制并粘贴过,但还没有编辑它。

答案 1 :(得分:0)

这些行是问题,您不能将Part对象用作Blob或InputStream。那里应该发生强制转换异常。

Part filePart = req.getPart("photo");
Part InputStream = filePart; //this line is not needed at all
ps.setBlob(1, (Blob) InputStream);

尝试这样的事情

ps.setBlob(1, filePart.getInputStream());

ps.setBinaryStream(1, filePart.getInputStream());