随着互联网的发展,图片已经成为传递信息的重要手段之一。在很多网站上,用户需要上传图片来展示自己的信息或者分享一些内容。而如何实现图片的上传和存储则是一个非常关键的问题。本文将介绍如何使用Java语言实现图片上传并存储到数据库中。
创新互联建站于2013年创立,是专业互联网技术服务公司,拥有项目成都网站建设、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元东光做网站,已为上家服务,为东光各地企业和个人服务,联系电话:028-86922220
一、准备工作
在实现图片上传和存储之前,我们需要准备好一些工具和环境。我们需要安装Java开发环境(JDK)和集成开发环境(IDE),本文使用的是JDK8和Eclipse。我们需要使用Tomcat作为Web服务器。我们需要使用MySQL数据库来存储上传的图片。
二、编写上传页面
我们需要编写一个上传页面,让用户可以选择要上传的图片。在这个页面中,需要使用HTML表单来实现文件上传的功能。下面是一个简单的HTML表单代码示例:
“`
上传图片
选择文件:
“`
在这个表单中,我们使用了enctype=”multipart/form-data”来指定上传的文件类型,并使用了input type=”file”来创建文件选择框。表单的action属性指向我们即将编写的Servlet。
三、编写Servlet
在前面的步骤中,我们已经创建了一个上传页面,现在我们需要编写一个Servlet来处理由该页面提交的文件。Servlet是Java Web开发中的基本组成部分,它可以接收客户端请求并返回响应结果。
创建一个名为UploadServlet的Java类,并继承HttpServlet。然后,我们需要重写doPost方法,用于处理POST请求。下面是一个简单的示例代码:
“`
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet(“/uploadServlet”)
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 上传文件存储目录
private static final String UPLOAD_DIRECTORY = “upload”;
// 数据库连接信息
private static final String JDBC_DRIVER = “com.mysql.jdbc.Driver”;
private static final String DB_URL = “jdbc:mysql://localhost:3306/test”;
private static final String DB_USER = “root”;
private static final String DB_PASSWORD = “”;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html;charset=UTF-8”);
// 获取上传的文件
Part filePart = request.getPart(“file”);
String fileName = getFileName(filePart);
// 连接数据库
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 插入数据库
String sql = “INSERT INTO images (filename, filepath) values (?, ?)”;
stmt = conn.prepareStatement(sql);
stmt.setString(1, fileName);
stmt.setString(2, UPLOAD_DIRECTORY + File.separator + fileName);
stmt.executeUpdate();
// 保存文件到磁盘
String uploadPath = getServletContext().getRealPath(“”) + UPLOAD_DIRECTORY;
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
filePart.write(uploadPath + File.separator + fileName);
// 成功上传
PrintWriter out = response.getWriter();
out.println(“文件上传成功!”);
out.close();
} catch (ClassNotFoundException | SQLException ex) {
ex.printStackTrace();
response.sendRedirect(“error.html”); // 处理上传失败情况
} finally {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
private String getFileName(final Part part) {
final String partHeader = part.getHeader(“content-disposition”);
for (String content : partHeader.split(“;”)) {
if (content.trim().startsWith(“filename”)) {
return content.substring(content.indexOf(‘=’) + 1).trim().replace(“\””, “”);
}
}
return null;
}
}
“`
在Servlet中,我们首先获取上传的文件和文件名,然后连接MySQL数据库,将文件名和路径插入到数据库中。接着,我们将上传的文件保存到web应用根目录下的upload文件夹中。
四、创建数据库表
在我们的Java程序中,我们使用了MySQL数据库来存储上传的图片。因此,在使用程序之前,我们需要创建一个名为“images”的表来存储图片信息。
“`
CREATE TABLE images (
id int(11) NOT NULL AUTO_INCREMENT,
filename varchar(255) DEFAULT NULL,
filepath varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
“`
在这个表中,我们定义了三个列,分别是id、filename和filepath。其中,id列是自动递增的主键。
五、测试上传功能
现在,我们已经完成了Java实现图片上传和数据库存储的所有步骤。接下来,我们需要测试一下我们的程序是否可以正常工作。
我们需要将上传页面和Servlet部署到Tomcat服务器中。然后,我们启动Tomcat服务器,并在浏览器中访问上传页面。
选择一个图片文件并点击上传按钮,我们会看到一个成功上传的提示信息。同时,这个图片会被保存到我们的数据库和web应用根目录下的upload文件夹中。
六、
在本文中,我们介绍了如何使用Java语言实现图片上传并存储到数据库中。通过使用这个程序,我们可以轻松地实现图片上传和存储,并且可以方便地获取上传的图片信息。除此之外,我们还可以根据我们的需求修改这个程序,使其更加符合我们的实际情况。
成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!
package shop.car.control;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
import shop.car.model.GoodService;
import com.jspart.upload.SmartUpload;
import com.jspart.upload.SmartUploadException;
public class ImageInput extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
PageContext pageContext = null;
JspFactory jsp = null;
// 实例化上载bean
SmartUpload mySmartUpload = new SmartUpload();
jsp = JspFactory.getDefaultFactory();
pageContext = jsp.getPageContext(this, request, response, “”铅亏谨, true,
8192, true);
// 初始化
mySmartUpload.initialize(pageContext);
// 设置上载的更大值
mySmartUpload.setMaxFileSize(500 * 1024 * 1024);
// 设定允许上传的文件(通过扩展名限制)
mySmartUpload.setAllowedFilesList(“jpg”);
// 上载文件
try {
mySmartUpload.upload();
} catch (SmartUploadException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
int count = 0;
try {
count = mySmartUpload.save(“/upload”, SmartUpload.SAVE_VIRTUAL);
} catch (SmartUploadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
out.println(count + “个文件上传成功!
“);
out.println(“空凳TEST=” + mySmartUpload.getRequest().getParameter(“TEST”)
+ “”);
// 循环取得所有上载的文件
for (int i = 0; i
// 取得上载的文件
com.jspart.upload.File myFile = mySmartUpload.getFiles().getFile(
i);
if (!myFile.isMissing()) {
// 取得上载的文件的文件名
String myFileName = myFile.getFileName();
// 取得不带后缀的文件名
String suffix = myFileName.substring(0, myFileName
.lastIndexOf(‘.’));
// 取得后缀名
String ext = mySmartUpload.getFiles().getFile(0).getFileExt();
// 取得文件的大小
int fileSize = myFile.getSize();
// 保存路径
String aa = request.getRealPath(request.getServletPath())
+ myFileName;
String trace = aa + myFileName;
String s=new String(trace.getBytes(“ISO”),”utf-8″);
// 取得别的参数
String explain = (String) mySmartUpload.getRequest()
.getParameter(“text”);
String send = (String) mySmartUpload.getRequest().getParameter(
“send”);
// 将文件保存在服务器端
try {
myFile.saveAs(trace, SmartUpload.SAVE_PHYSICAL);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 下面的是将上载的文件保存到数据库中
// 将文件读到流中
java.io.File file = new java.io.File(s);
java.io.FileInputStream fis = new java.io.FileInputStream(file);
out.println(file.length());
GoodService.addGoods(fis, file);
out.println((“上载成功!!!”).toString());
} else {
out.println((“上载失败!!!”).toString());
}
}// 与前面的if对应
out.flush();
out.close();
}
}
一般数据库只存图片的路径。你可以在web下建一个目录(images),然后把上传的图片放在里面。更好是用档巧系统时间命名,避免冲突。
具体路径是通过request.getRealPath(“images”)得到,让后把图片改名放进去。
数据库记住相对的路径(1111.jpg)就可以了,在页面逗搏可以—-pic—
保密和字符处理
首先这是一种码拦SB做扒模世法,图片保存到数据库这个很浪费数据库资源, 通常情况下图片等文件都是用ftp服务器来存储文件的春肢. 为什么要用base64进行编码是因为, base64会把文件这个文件转换成字符串, base64编码后得到的是一组字符串, 为什么要用blob类型, 因为这个类型可以存储4GB数据, 数据库中普通的 varchar varchar2 text等类型都有长度的限制
因为二进制数据无法使用弊塌镇格式化的传输(如xml、json),而Base64提供了剔除特殊字符(如
考虑一个接口可能会同时返回一个图片的数据,加上这个图片的说明,使用json返回的时候就必须要对图片信息进行Base64编码。否则,你只能返回一个url,然后让客户端再使用这个url获取图片信息。
上面只是讨论Base64的用处,至于存储在数据库是什么无所谓。本人还是倾向于原始的二进制数据,毕竟如果只有一个地方存储这些数据,那么保存原始数据能保证不会失去任何精度。
关于java 图片 数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器选创新互联,香港虚拟主机被称为香港虚拟空间/香港网站空间,或者简称香港主机/香港空间。香港虚拟主机特点是免备案空间开通就用, 创新互联香港主机精选cn2+bgp线路访问快、稳定!
文章名称:Java实现图片上传及数据库存储(java图片数据库)
分享网址:http://www.shufengxianlan.com/qtweb/news31/208981.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联