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 问题图片怎么存储到数据库。
  • Java 保存图片到数据库时,为什么要对图片进行base64编码

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

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/261096.html<

(0)
管理的头像管理
上一篇2025-05-03 11:27
下一篇 2025-05-03 11:29

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注