Java实现图片上传及数据库存储 (java 图片 数据库)

随着互联网的发展,图片已经成为传递信息的重要手段之一。在很多网站上,用户需要上传图片来展示自己的信息或者分享一些内容。而如何实现图片的上传和存储则是一个非常关键的问题。本文将介绍如何使用Java语言实现图片上传并存储到数据库中。

一、准备工作

在实现图片上传和存储之前,我们需要准备好一些工具和环境。我们需要安装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语言实现图片上传并存储到数据库中。通过使用这个程序,我们可以轻松地实现图片上传和存储,并且可以方便地获取上传的图片信息。除此之外,我们还可以根据我们的需求修改这个程序,使其更加符合我们的实际情况。

相关问题拓展阅读:

Java web 问题图片怎么存储到数据库。

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—

Java 保存图片到数据库时,为什么要对图片进行base64编码

保密和字符处理

首先这是一种码拦SB做扒模世法,图片保存到数据库这个很浪费数据库资源, 通常情况下图片等文件都是用ftp服务器来存储文件的春肢. 为什么要用base64进行编码是因为, base64会把文件这个文件转换成字符串, base64编码后得到的是一组字符串, 为什么要用blob类型, 因为这个类型可以存储4GB数据, 数据库中普通的 varchar varchar2 text等类型都有长度的限制

因为二进制数据无法使用弊塌镇格式化的传输(如xml、json),而Base64提供了剔除特殊字符(如

考虑一个接口可能会同时返回一个图片的数据,加上这个图片的说明,使用json返回的时候就必须要对图片信息进行Base64编码。否则,你只能返回一个url,然后让客户端再使用这个url获取图片信息。

上面只是讨论Base64的用处,至于存储在数据库是什么无所谓。本人还是倾向于原始的二进制数据,毕竟如果只有一个地方存储这些数据,那么保存原始数据能保证不会失去任何精度。

关于java 图片 数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Java实现图片上传及数据库存储 (java 图片 数据库)