图片上传至数据库然后显示在页面.docx
- 文档编号:3756365
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:14
- 大小:286.12KB
图片上传至数据库然后显示在页面.docx
《图片上传至数据库然后显示在页面.docx》由会员分享,可在线阅读,更多相关《图片上传至数据库然后显示在页面.docx(14页珍藏版)》请在冰豆网上搜索。
图片上传至数据库然后显示在页面
前几天有同学在做用户注册的时候问到,怎么上传头像呢,然后在页面如何显示头像呢?
所以在这里做了个小例子,和大家分享一下,希望对大家有所帮助!
学习交流QQ:
1134135987
首先我用的开发工具是:
Myeclipse10.0,数据库用的是Oracle10g,做的这个小例子的功能是:
上传图片到数据库,然后显示到页面,比较简单,没有用Servlet,用的是Struts2。
下面是具体步骤和完整源代码:
首先我的项目名是Image_Up_Show_Test,项目结构是:
首先web.xml文件中的代码是:
xmlversion="1.0"encoding="UTF-8"?
>
xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns="xmlns: web="xsi: schemaLocation="version="2.5"> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts.xml中的代码是: xmlversion="1.0"encoding="UTF-8"? > DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN" "http: //struts.apache.org/dtds/struts-2.1.dtd"> \FileTemp"/> upImage.jsp中主要的代码是: upImage"method="post"enctype="multipart/form-data"> showImage.jsp中主要的代码是:
您的头像为:
我数据库文件为:
--创建tb_image表
createtabletb_image(
img_idnumber(20)primarykeynotnull,--图片的ID
img_pathvarchar2(200)--图片的名称
);
--创建序列
createsequenceseq_image
minvalue1
startwith1
incrementby1;
--查询tb_image表
select*fromtb_image;
SetCharacterEncodingFilter这个类(这个类在这个项目中其实没有作用,是做编码控制的,但是在这里还是共享一下吧)的源代码为:
packageorg.colin.utils;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
publicclassSetCharacterEncodingFilterimplementsFilter{
protectedStringencoding=null;
protectedFilterConfigfilterConfig=null;
protectedbooleanignore=true;
publicvoiddestroy(){
this.encoding=null;
this.filterConfig=null;
}
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
if(ignore||(request.getCharacterEncoding()==null)){
Stringencoding=selectEncoding(request);
if(encoding!
=null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request,response);
}
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
Stringvalue=filterConfig.getInitParameter("ignore");
if(value==null)
this.ignore=true;
elseif(value.equalsIgnoreCase("true"))
this.ignore=true;
elseif(value.equalsIgnoreCase("yes"))
this.ignore=true;
else
this.ignore=false;
}
protectedStringselectEncoding(ServletRequestrequest){
return(this.encoding);
}
}
ImageDTO类的代码是:
packageorg.colin.dto;
publicclassImageDTO{
privateIntegerimg_id;
privateStringimg_path;
publicIntegergetImg_id(){
returnimg_id;
}
publicvoidsetImg_id(Integerimg_id){
this.img_id=img_id;
}
publicStringgetImg_path(){
returnimg_path;
}
publicvoidsetImg_path(Stringimg_path){
this.img_path=img_path;
}
@Override
publicinthashCode(){
finalintprime=31;
intresult=1;
result=prime*result+((img_id==null)?
0:
img_id.hashCode());
result=prime*result
+((img_path==null)?
0:
img_path.hashCode());
returnresult;
}
@Override
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(getClass()!
=obj.getClass())
returnfalse;
ImageDTOother=(ImageDTO)obj;
if(img_id==null){
if(other.img_id!
=null)
returnfalse;
}elseif(!
img_id.equals(other.img_id))
returnfalse;
if(img_path==null){
if(other.img_path!
=null)
returnfalse;
}elseif(!
img_path.equals(other.img_path))
returnfalse;
returntrue;
}
publicImageDTO(){
super();
}
publicImageDTO(Integerimg_id,Stringimg_path){
super();
this.img_id=img_id;
this.img_path=img_path;
}
}
ImageDAO类中代码为:
packageorg.colin.dao;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
importorg.colin.Connection.MyConnection;
importorg.colin.dto.ImageDTO;
publicclassImageDAO{
privateConnectionconn=null;
privatePreparedStatementps=null;
/**
*增加图片
*@paramimage
*/
publicvoidinsertImage(ImageDTOimage){
try{
conn=MyConnection.getConnection();
Stringsql="insertintotb_image(img_id,img_path)values(seq_user.nextval,?
)";
ps=conn.prepareStatement(sql);
ps.setString(1,image.getImg_path());
ps.execute();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
MyConnection类中的代码是:
packageorg.colin.Connection;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassMyConnection{
/**
*1、导入JDBCjar包(jar包也称类库)----这一步非常重要
*2、加载驱动
*3、获取连接
*/
privatestaticStringdriver="oracle.jdbc.OracleDriver";
privatestaticStringurl="jdbc:
oracle:
thin:
@localhost:
1521:
orcl";//1521是oracle数据库的端口.orcl是数据库的名称
privatestaticStringusername="hr";//用户名
privatestaticStringpassword="hr";//密码
privatestaticConnectionconn=null;
static{
try{
//加载驱动(以反射的方式加载驱动)
Class.forName(driver);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
publicstaticConnectiongetConnection(){
try{
//获取连接
conn=DriverManager.getConnection(url,username,password);
}catch(SQLExceptione){
e.printStackTrace();
}
returnconn;
}
/**
*测试
*@paramargs
*/
publicstaticvoidmain(String[]args){
System.out.println("Connection:
"+getConnection());
}
}
UpLoadAction类中的代码是:
packageorg.colin.action;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importorg.apache.struts2.ServletActionContext;
importorg.colin.dao.ImageDAO;
importorg.colin.dto.ImageDTO;
importcom.opensymphony.xwork2.ActionSupport;
publicclassUpLoadActionextendsActionSupport{
privatefinalstaticStringfile="files";
privateImageDTOimage;
privateFilemyFile;
privateStringmyFileFileName;//保存的是上传图片的全名,如:
吴江波.jpg
//上传图片
publicStringupImage(){
System.out.println("上传的文件名为:
"+myFileFileName);//打印出:
上传的文件名为:
如何卸载oracle.txt
StringrealPath=ServletActionContext.getServletContext().getRealPath(file+"/");
//将上传的图片名称保存到数据库中,但是名字全部统一以当前系统时间命名
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");
Stringend=myFileFileName.substring(myFileFileName.indexOf("."));
StringnewPhothPath="/files/"+sdf.format(newDate())+end;//得到图片的新名称
ImageDTOimg=newImageDTO();
image=newImageDTO();
image.setImg_path(newPhothPath);
img.setImg_path(newPhothPath);
ImageDAOdao=newImageDAO();
dao.insertImage(img);//将图片的名称保存到数据库
copyFiles(realPath);//将图片保存到服务器下的指定文件夹中
return"showImage";
}
/**
*把目标文件拷贝到服务器下的指定目录中
*@paramrealPath
*/
privatevoidcopyFiles(StringrealPath){
try{
InputStreamis=newFileInputStream(myFile);
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");
Stringend=myFileFileName.substring(myFileFileName.indexOf("."));
OutputStreamos=newFileOutputStream(realPath+"/"+sdf.format(newDate())+end);
intlen=0;
byte[]b=newbyte[is.available()];
while((len=is.read(b))!
=-1){
os.write(b,0,len);
os.flush();
}
is.close();
os.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
//--------------------------------------set和get方法--------------------------------------//
publicFilegetMyFile(){
returnmyFile;
}
publicvoidsetMyFile(FilemyFile){
this.myFile=myFile;
}
publicStringgetMyFileFileName(){
returnmyFileFileName;
}
publicvoidsetMyFileFileName(StringmyFileFileName){
this.myFileFileName=myFileFileName;
}
publicImageDTOgetImage(){
returnimage;
}
publicvoidsetImage(ImageDTOimage){
this.image=image;
}
}
OK了,所有源代码全部贴上来了,现在把项目部署好,然后打开浏览器,输入:
http:
//localhost:
8080/Image_Up_Show_Test
然后回车,就会进入到如下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图片 上传 数据库 然后 显示 页面