Java 如何制作一个JSP页面将图像上传到MySQL数据库?

Java 如何制作一个JSP页面将图像上传到MySQL数据库?,java,mysql,jsp,servlets,file-upload,Java,Mysql,Jsp,Servlets,File Upload,我有一个用JSP编写的web项目,后端有几个Java类。我想制作一个页面,用户上传一个图像,并将其保存在数据库中 我有一个用户上传图像的页面,表单如下: <form action="UploadImage.jsp" method="post" enctype="multipart/form-data"> <input type="file" name="file" accept="image/*"> <input type="submit" name="submit

我有一个用JSP编写的web项目,后端有几个Java类。我想制作一个页面,用户上传一个图像,并将其保存在数据库中

我有一个用户上传图像的页面,表单如下:

<form action="UploadImage.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="image/*">
<input type="submit" name="submit" value="Upload Image">

我想让UploadImage.jsp文件将此图像保存到MySQL数据库中的LongBLOB对象。我尝试使用request.getParameter()和request.getPart(),但它们都返回null,任何尝试使用这些结果的行为都会导致NullPointerException


我尝试过在线查找,但所有的解决方案都涉及使用servlet,而不是JSP页面。是的,我知道使用JSP不是最佳实践,但是对于这个项目来说,我必须使用它

您可以使用ServletFileUpload类来解析请求,并将多个文件(在您的例子中是映像)上载到服务器上的临时目录,然后只需将文件的位置存储为数据库中的路径即可

ServletContext context = pageContext.getServletContext();    
String filePath = "c:\\apache-tomcat\\webapps\\images\\";

DiskFileItemFactory factory = new DiskFileItemFactory();      
factory.setRepository(new File("c:\\temp"));
ServletFileUpload uploader = new ServletFileUpload(factory);

try { 
    List files = upload.parseRequest(request);
    Iterator<FileItem> iter = fileItems.iterator();

    while (iter.hasNext()) {
        FileItem file = iter.next();            
        File serverFile = new File(filePath + 
            file.getName().substring(fileName.lastIndexOf("\\")));            
        file.write(serverFile);
    }
} catch(Exception ex) {
    System.out.println(ex);
}
ServletContext=pageContext.getServletContext();
String filePath=“c:\\apache tomcat\\webapps\\images\\”;
DiskFileItemFactory=新的DiskFileItemFactory();
setRepository(新文件(“c:\\temp”);
ServletFileUpload uploader=新的ServletFileUpload(工厂);
试试{
列表文件=upload.parseRequest(请求);
迭代器iter=fileItems.Iterator();
while(iter.hasNext()){
FileItem file=iter.next();
文件服务器文件=新文件(文件路径+
file.getName().substring(fileName.lastIndexOf(“\\”);
file.write(serverFile);
}
}捕获(例外情况除外){
系统输出打印项次(ex);
}

您可以使用ServletFileUpload类解析请求并将多个文件(在您的情况下是映像)上载到服务器上的临时目录,然后只需将文件的位置存储为数据库中的路径即可

ServletContext context = pageContext.getServletContext();    
String filePath = "c:\\apache-tomcat\\webapps\\images\\";

DiskFileItemFactory factory = new DiskFileItemFactory();      
factory.setRepository(new File("c:\\temp"));
ServletFileUpload uploader = new ServletFileUpload(factory);

try { 
    List files = upload.parseRequest(request);
    Iterator<FileItem> iter = fileItems.iterator();

    while (iter.hasNext()) {
        FileItem file = iter.next();            
        File serverFile = new File(filePath + 
            file.getName().substring(fileName.lastIndexOf("\\")));            
        file.write(serverFile);
    }
} catch(Exception ex) {
    System.out.println(ex);
}
ServletContext=pageContext.getServletContext();
String filePath=“c:\\apache tomcat\\webapps\\images\\”;
DiskFileItemFactory=新的DiskFileItemFactory();
setRepository(新文件(“c:\\temp”);
ServletFileUpload uploader=新的ServletFileUpload(工厂);
试试{
列表文件=upload.parseRequest(请求);
迭代器iter=fileItems.Iterator();
while(iter.hasNext()){
FileItem file=iter.next();
文件服务器文件=新文件(文件路径+
file.getName().substring(fileName.lastIndexOf(“\\”);
file.write(serverFile);
}
}捕获(例外情况除外){
系统输出打印项次(ex);
}
您必须使用

p部分=request.getpart(“文件”)

inputstream is=p.getinputstream(p)

字节[]b=Ioutils.getBytes(is)

然后可以使用Setbytes存储在mysql中

在类名之前,您还声明了servlet上的多部分注释

p部分=request.getpart(“文件”)

inputstream is=p.getinputstream(p)

字节[]b=Ioutils.getBytes(is)

然后可以使用Setbytes存储在mysql中


您还在类名之前在servlet上声明了多部分注释

您确实不想将图像直接存储在MySQL数据库中。您最好保存图像的路径,并在需要时加载图像。否则,我将在何处存储图像?我在网上看到过很多这样的答案,但我不知道还有其他方法可以做到这一点。也许你有一个为这些jsp服务的Web服务器,对吗?在这里,您可以创建一个包含图像的文件夹,然后存储图像的名称或完整路径。@SnazzyWolf是的,我看到了,但不幸的是,上传部分使用的是servlet而不是JSP。您确实不想将图像直接存储在MySQL数据库中。您最好保存图像的路径,并在需要时加载图像。否则,我将在何处存储图像?我在网上看到过很多这样的答案,但我不知道还有其他方法可以做到这一点。也许你有一个为这些jsp服务的Web服务器,对吗?在这里,您可以创建一个包含图像的文件夹,然后存储图像的名称或完整路径。@SnazzyWolf是的,我看到了,但不幸的是,上传部分使用的是servlet而不是JSP。我自己还没有测试它!但只是为了演示它是如何工作的。我自己还没有测试过!但只是为了证明它是如何工作的。