Java 如何制作一个JSP页面将图像上传到MySQL数据库?
我有一个用JSP编写的web项目,后端有几个Java类。我想制作一个页面,用户上传一个图像,并将其保存在数据库中 我有一个用户上传图像的页面,表单如下: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
<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。我自己还没有测试它!但只是为了演示它是如何工作的。我自己还没有测试过!但只是为了证明它是如何工作的。