Java Web实践专题——图片管理

在一个网站中可能会存在大量的图片,有些图片对于所有的网页是相同的,例如网页的LOGO,主页中的图片,这些图片就像普通的html文件一样,这些图片的处理通常使用网页编辑工具来完成的,也就是说通常是由美工完成的。主要使用下面的html标签:
<img alt="" src=""/>
其中src指定文件的路径,使用相对路径,通常我们会在web应用中专门创建一个文件夹images存放所有的图片。
这些图片的处理一般不需要Java程序员管理。还有一些图片是与程序员需要考虑的,例如,网站有一个留言板,在留言的时候用户可以选择表情,表情是一个非常简单的图片,每个用户留言都会选择一个,如果不选择,系统也会给一个默认的。这里使用图片的特点是、大家共享这么多的图片,不管怎么选择,都是从中选择。对于这种图片的处理通常的做法:在记录留言的同时,记录图片的编号,这样在显示的时候根据图片的编号查找图片本身。
另外还有一种情况,如果系统要保存所有用户的照片,这些照片对于不同的用户是不相同的,这时候如果采用上面的方式图片从完成的功能来说也可以,但是管理起来不方便,更合理的方式应该使用数据库。通常通过上传的方式把图片上传到服务器,然后存储到数据库,然后需要的时候,从数据库提取然后显示。
下面分别对两种处理图片的方式进行介绍。
通过路径管理图片
这种方式下,为了访问文件方便,需要对文件名进行特殊设置,例如上面所说的20种表情图片,可以使用image01.gif、image02.gif、image03.gif等等。
(1) 路径的生成
首先在html文件中单选按钮让用户选择,例如下面的代码展示了20种被选择的表情,使用上面说的文件名命名方式。
请选择表情:<br>
<input type="radio" name="mode" value="01"/>
<img alt="表情1" src="images/image01.gif" />
<input type="radio" name="mode" value="02"/>
<img alt="表情2" src="images/image02.gif" />
<input type="radio" name="mode" value="03"/>
<img alt="表情3" src="images/image03.gif" />
…
这里需要注意的mode是单选按钮的名字,处理文件中会根据这个名字获取用户选择的信息,value对应的某个选项的值,如果你选择第一个图片,则单选按钮的值就是01。img标签用于显示表情图片。
然后在处理文件中获取这个参数,把它保存到数据库中,获取信息,可以通过下面的代码完成:
request.getParameter(“mode”);
如何向数据库中存储,请参考本书中关于数据库部分。
(2) 根据路径信息生成图片
首先,需要从数据库中获取到要显示的图片的路径信息,访问数据库的过程请参考本书中关于数据库部分。假设获取的信息保存在str中,通常我们会先保存到request中,通过下面的代码:
request.setAttribute(“mode”,str);
然后在页面中显示,需要根据这个路径确定文件名,所以img标签中的文件名部分需要根据这个变量确定。
原来的格式为:
<img src="images/image01.gif" />
需要把01替换成变量,使用表达式:
<img src="images/image${requestScope.mode}.gif" alt=""/>
使用下面的代码也可以得到相同的效果:
<%
String str = (String)request.getAttribute("mode");
out.println("<img src=\"images/image"+str+".gif\" alt=\"\"/>");
%>
或者
<%
String str2 = (String)request.getAttribute("mode");
%>
<img src="images/image<%=str2%>.gif" alt=""/>
使用存储路径的方式的思路非常简单,存储图片的信息到数据库中,不一定是全部信息,只要能确定图片即可,然后根据数据库中的信息构造图片的路径显示路径。
通过数据库存储图片
在数据库中存储图片,需要使用BLOB类型的字段,BLOB用于存储字节流对象。假设我们要管理用户信息,为了简化,这里用户信息包括用户名、用户编号和照片,表的定义语句如下:
create table user
(
userid varchar(10) primary key,
username varchar(10),
picture blob
)
下面分别对图片的上传、存储和显示进行介绍。
(1)图片的上传
文件的上传功能我们使用Struts中提供的上传功能。首先需要创建上传的界面,对应的代码如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<head>
<title>
adduser
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
用户添加<br>
<html:form action="addAction.do" method="post" enctype="multipart/form-data">
用户编号:<html:text property="userid"/><br>
用户名:<html:text property="username"/><br>
照片:<html:file property="picture"/>
<html:submit>
</html:submit>
</html:form>
</body>
</html>
注意:请求方式是post,enctype的值为“multipart/form-data”。
需要创建一个Form用于传值:
package picturetest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
public class AddActionForm
extends ActionForm {
private FormFile picture;
private String userid;
private String username;
public FormFile getPicture() {
return picture;
}
public void setPicture(FormFile picture) {
this.picture = picture;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
/** @todo: finish this method, this is just the skeleton.*/
return null;
}
public void reset(ActionMapping actionMapping,
HttpServletRequest servletRequest) {
}
}
(2)图片的存储
图片的存储应该创建单独的类来完成,因为代码太多,这里简化,直接在Action中完成对信息的添加。
package picturetest;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import org.apache.struts.upload.FormFile;
import java.sql.*;
import java.io.*;
public class AddAction
extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
AddActionForm addActionForm = (AddActionForm) form;
String uid = addActionForm.getUserid();
String username = addActionForm.getUsername();
FormFile file = addActionForm.getPicture();
System.out.println(file.getFileSize());
if(file == null)
return mapping.findForward("success");
try
{
Class.forName("com.mysql.jdbc.Driver");
//加载驱动程序
Connection con
= DriverManager.getConnection("jdbc:mysql://localhost:3306/webtest","root","");
//创建连接
PreparedStatement pstmt = con.prepareStatement("insert into user values(?,?,?)");
//创建语句对象
InputStreamis = file.getInputStream();
//根据文件创建输入流
pstmt.setString(1,uid);
//为sql语句中的第一个变量赋值
pstmt.setString(2,username);
//为sql语句中的第二个变量赋值
pstmt.setBinaryStream(3,is,file.getFileSize());
//为sql语句中的第三个变量赋值,就是文件输入流
pstmt.execute();
//执行sql语句
is.close();
//关闭输入流
pstmt.close();
//关闭语句对象
con.close();
//关闭连接对象
}catch(Exception e)
{
System.out.print(e.toString());
}
request.setAttribute("userid",uid);
request.setAttribute("username",username);
return mapping.findForward("success");
}
}
把图片存入数据库的过程主要是先根据文件创建输入流,然后把该输入流作为参数添加到数据库中。保存图片使用:
pstmt.setBinaryStream(3,is,file.getFileSize());
其中,第一个参数3表示为sql语句中的第三个变量赋值,也就是第3个问号指定的变量,第二个参数is表示输入流,第三个参数表示图片的大小。
如果这里的图片不是上传的,而是位于文件系统中,操作过程也非常类似:
String str = getServletContext().getRealPath("code.gif");
File file = new File(str);
InputStream fis = new FileInputStream(file);
主要创建一个从图片的输入流即可,前面的是从上传文件的输入流,这里是从磁盘文件的输入流,后面我们还会介绍从内存图片的输入流。接下来向数据库中存储的过程是相同的。
(3)图片的显示
图片本身的显示通常伴随有其它信息的显示,这里把这个用户的所有信息都显示出来,但是文本类信息与图片信息本身的显示过程不同,所以这里使用两个文件:第一个文件用于显示图片本身,第二个文件用于显示其它信息以及关联到图片上。
显示图片的文件:
<%@page contentType="image/jpeg"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>
<%
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/webtest";
try {
String userid = request.getParameter("userid");
//获取要显示的用户的ID
Class.forName(driver);
//加载驱动程序
Connection con = DriverManager.getConnection(url, "root", "");
//创建连接
String sql = "select picture from user where uid='"+userid+"'";
//String sql = "select picture from user where uid='00006789'";
PreparedStatement pstmt = con.prepareStatement(sql);
//创建语句对象
ResultSet rs = pstmt.executeQuery();
//查询的结果集
rs.next();
InputStream is = rs.getBinaryStream(1);
//从数据库中读取图片数据
byte b[] = new byte[8192];
//创建字节数组,用于接收数据
OutputStream os = response.getOutputStream();
//获取输出流
int i;
while ((i=is.read(b)) > 0) { //从输入流读取数据
os.write(b); //然后把读取的数据进行输出
}
os.close();
is.close();
rs.close();
pstmt.close();
con.close();
//关闭相关对象
}
catch (Exception e) {
out.println(e.toString());
}
%>
需要注意几个地方:
Ø page属性的contentType属性的值为:image/jpeg;
Ø 读取图片,使用rs.getBinaryStream(1);
Ø 需要获取输出流:OutputStream os = response.getOutputStream();
Ø 把需要显示的照片的用户ID传递过来。
显示所有信息的文件:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
userinformation
</title>
</head>
<body bgcolor="#ffffff">
<h1>
用户信息:
</h1>
用户编号:${requestScope.userid}<br>
用户名:${requestScope.username}<br>
照片:<img alt="照片" src="picture.jsp?userid=${requestScope.userid}" />
</body>
</html>
注意:照片:<img alt="照片" src="picture.jsp?userid=${requestScope.userid}" />,picture.jsp的作用就是生成图片,src的值为picture.jsp就是把picture.jsp生成的图片作为一个静态图片使用了,使用“?”号把要显示的用户ID传递给picture.jsp文件。
这里不再给出配置文件struts-configure.xml的内容。
基于web的图片资管理系统的设计与实现 整个系统按功能划分,分为五大模块:前面的四大模块是为系统的注册用户提供的,注册用户注册成功后,就可以登录系统首先可以建立图片夹,在建好图片夹后可以上传图片并且添加图片信息、也可以大图和小图切换观赏图片、评论图片并且查看评论和删除图片,用户也可以修改登录密码和用户资料等一系列操作;最后一个模块是管理员登陆所进行的操作,系统管理员登录系统可以添加图片夹的类型,以便于注册用户在上传图片建立图片夹时根据上传的图片选择对应的图片夹。4.5 创建图片夹和上传图片的实现 29。 阅读详情

相关推荐

Java Web图片上传显示管理实战

htmltable {th, td {th {pre {简介:本项目主要介绍了如何使用Java技术实现Web应用程序中的图片上传、存储、显示及删除功能。通过结合JSP、Servlet和MySQL,用户可以上传图片文件,并在前端页面以列表形式展示这些图片。同时,提供了删除图片的选项,确保了图片信息在数据库中的同步更新和物理文件的同步删除。在安全性方面,项目着重讲解了如何防止恶意代码注入和其他安全漏洞。

weixin_30995917的博客 1228

Java实现图片的上传和显示

提示:前端Vue(Vue.js)+后端Servlet实现图片的上传和显示1)以上就是今天要讲的内容,本文仅仅简单介绍了Vue(Vue.js)+Servlet,用表单实现新闻图片上传和显示。2)需要注意的是,以上代码只实现了基本的图片上传和显示功能,还需要进一步优化和完善。例如,在处理文件上传时,没有对上传文件进行大小、类型等方面的验证,以防止恶意攻击或误操作导致的问题发生。同时,在保存上传文件时,还需要考虑文件名冲突、文件夹权限等诸多细节问题。😚😚。

小知识吖 4万+

ISO26262 功能安全各个阶段测试要求

1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描...

AgingMoon的博客 1万+

java上传图片

【代码】java上传图片

liujiahuan_的博客 9236

Comsol固体力学仿真﹣﹣受均匀内压的厚壁球壳弹塑性分析(加载卸载全流程)

COMSOL固体力学及结构力学仿真较少,故而查询了有关资料,才建立了如下模型。图4 加载卸载全历程中的冯米塞斯应力变化。该有限元模型是通过扫掠而得的结构化网格。图2 加载卸载全历程中的塑型区域变化。图3 加载卸载全历程中的位移应力变化。图6 关键节点第一,第三主应力分布。图5 关键节点应力场与塑性区分布。《弹塑性力学》大作业,记录一下。图1 球体的有限元网格模型。

weixin_62236383的博客 1488

Python + DeepSeek 完美结合:本地部署提效指南

随着生成式 AI 和深度学习技术的快速发展,如何将智能搜索工具与本地部署结合以提升效率成为了许多企业和开发者关注的重点。DeepSeek 是一款开源的智能搜索框架,结合 Python 的灵活性,能够实现高效、可靠的本地部署方案。本文将介绍如何通过 Python 和 DeepSeek 的完美结合,实现本地化部署并提升工作效率。通过将 Python 与 DeepSeek 结合,可以快速实现语义搜索的本地化部署,确保数据安全的同时提升工作效率。文件可直接作为 DeepSeek 的输入数据。

weixin_44872675的博客 1万+

基于web的图片资源库管理系统的设计与实现

整个系统按功能划分,分为五大模块:前面的四大模块是为系统的注册用户提供的,注册用户注册成功后,就可以登录系统首先可以建立图片夹,在建好图片夹后可以上传图片并且添加图片信息、也可以大图和小图切换观赏图片、评论图片并且查看评论和删除图片,用户也可以修改登录密码和用户资料等一系列操作;最后一个模块是管理员登陆所进行的操作,系统管理员登录系统可以添加图片夹的类型,以便于注册用户在上传图片建立图片夹时根据上传的图片选择对应的图片夹。4.5 创建图片夹和上传图片的实现 29。

qq_79120063的代码博客 1390

【KITTI数据集中Raw_Data数据标定文件中的参数关系解读】

上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

weixin_43389152的博客 1527

JAVA零基础入门3-实现上传图片功能

实现了增删改查的基础功能后,逐步增加新的功能,本章节将完成菜品图片信息的上传与显示功能,花费时间比之增删改查较长,但是学会了之后也是收获满满。其中controller的书写方法也在慢慢变得规范

a1571861354的博客 2142

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不支持问题

本文详细解析了在国产麒麟系统上部署Kettle时遇到的aarch64架构不支持问题,提供了从获取适配的SWT库、修改启动脚本到生产环境调优的完整解决方案。文章重点解决了ARM架构与Java GUI工具的兼容性挑战,并分享了内存配置、字体显示及Carte服务部署等实战经验,助力用户在国产化环境中稳定运行ETL流程。

weixin_29197835的博客 562

java怎么做一个图片管理程序_Java Web实践专题——图片管理

在一个网站中可能会存在大量的图片,有些图片对于所有的网页是相同的,例如网页的LOGO,主页中的图片,这些图片就像普通的html文件一样,这些图片的处理通常使用网页编辑工具来完成的,也就是说通常是由美工完成的。主要使用下面的html标签: 其中src指定文件的路径,使用相对路径,通常我们会在web应用中专门创建一个文件夹images存放所有的图片。这些图片的处理一般不需要Java程序员管理。还有一些...

weixin_39966765的博客 547

从零开始:用君正T23ZN打造智能门锁双摄系统(含代码示例与调试技巧)

本文详细介绍了基于君正T23ZN视频处理芯片构建智能门锁双摄系统的完整实战方案。内容涵盖硬件选型与核心电路设计、软件开发环境搭建、双摄驱动框架、图像信号处理(ISP)调优、人脸识别算法集成与性能优化,以及系统调试与稳定性保障。文章提供了丰富的代码示例和调试技巧,旨在帮助嵌入式开发者高效实现具备人脸识别与监控功能的低功耗智能门锁视觉系统。

opencv7vision的博客 717

Web开发中的图片管理:策略与实践

在Web开发中,图像是无法忽视的重要组成部分。然而,随着图片数量的增加和高清图像的普及,图片管理变得越来越复杂。在这篇文章中,我们将详细探讨Web开发中的图片管理策略和实践,包括图片优化、存储、分发和加载策略。

沐雨风栉 1165

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java图片管理系统_基于Java Web技术的图片管理系统的设计与实现.doc

基于Java Web技术的图片管理系统的设计与实现本科毕业设计目 录第1章 引言61.1 课题研究目的及意义61.2 课题研究的内容72.1 用户功能需求7图片收藏数据库查询系统图片收藏数据库查询系统是方便用户对建筑图片的管理,主要功能包括添加图片功能、删除图片功能、修改图片功能、查询图片功能。72.2 性能需求72.3 主要技术分析83.1 系统功能分析93.2 处理流程设计103.2.1 系统...

weixin_33236271的博客 2134

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于Java Web的 Ephoto图片管理系统的设计与 实现

当今在校大学生创业和勤工俭学的意识日渐提升,许多大学生希望通过自己的努力付出得到一些经济上的回报,以此来改善自己的生活和减轻家庭负担。大学生每天通过各种兼职平台找工作达到一万多份。存在的问题是许多兼职网站存在监管漏洞,让许多不法分子找到了可乘之机,在上面发布一些不实的信息,并且在参与兼职的过程中,大部分学生都遇到过通过中介寻找兼职被骗,雇主克扣工资,找不到合适的兼职等麻烦。 针对上述问题本系统设计了一个公开、真实的兼职平台,为在校大学生提供兼职信息。并且提供了完善的监管系统。系统提供了较为完善的功能模块,主

weiyistudio的博客 902

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java WEB——人事管理系统

Java WEB——人事管理系统数据库网页网页展示部分代码展示问题 这是我的一个小总结~ 数据库 这是我数据库里设计的表,具体的我就不展示了……我用的服务器是tomcat,想要连接数据库就要在tomcat的lib中加入mysql-connector-java-5.1.8-bin.jar,才能连接成功! 网页 网页展示 我对网页的想法就是,先把表显示出来,然后下面再加功能,提交数据之后重新刷...

CATKIN_ISME的博客 1万+

java 题库管理系统_JAVA WEB 题库管理系统

【实例简介】JAVA WEB做的题库管理系统。可以添加、修改、删除题目,题目可以带图片,还可以做题,判断正误,数据库MySql【实例截图】【核心代码】题库管理└── 题库管理├── build│ ├── generated│ │ ├── classes│ │ │ └── org│ │ │ └── apache│ │ │ └──...

weixin_35075655的博客 1923

JAVA图片管理工具

JAVA图片管理工具 码云地址 https://gitee.com/songqiming/ywdf 介绍 一款公共图片上传和读取的小工具 软件架构 基于mybatis-plus和spring-boot项目 安装教程 用项目中的sql创建数据库,修改数据库连接 讲prop-web.yml文件中的imagePathPrefix修改为需要的路径,启动项目就OK了 使用说明 提供两个接口 /pub/upl...

sqm1995的博客 1679

基于Java的图片管理系统

复杂的信息管理,计算机能够充分发挥它的优越性。用直接操作来查找,添加,修改,删除这些图片资料信息,由于数据繁多,工作量十分巨大,查找,编辑都十分困难,而且极易出错,容易造成图片资料的混乱或者丢失。使图片资料管理工作规范化,系统化,程序化,避免图片资料管理中的混乱,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图片的情况。随着计算机和数码设备的普及,越来越多的人接触大量的多媒体信息,对于信息的把握就显得尤为重要,以图片的内在性质特征为内容,用语义描述和刻画图片的方式,准确的描述图片以及内容。

毕业设计大牛哥 1396

java web 上传图片到项目目录并将文件路径放到数据库

最近在学习java web,在练习DVD信息管理系统时一直对照片上传问题的处理感到非常棘手,在我的仔细研究和钻研下,终于完美解决了这个难题,下面我讲述一下具体的步骤: 思路阐述:将图片放到项目的/webTest/imgs/文件夹下,为了避免图片名重复,将图片名改为获取当前秒数+ .jpg的格式。然后将图片的项目路径储存到数据库中,以便后面展示图片进行读取图片信息。 第一...

weixin_30312557的博客 3690
上一篇: Java Web实践专题——图形验证码的生成与使用
下一篇: Java Web实践专题——免安装的MySQL的用法
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值