上传图片并保存到数据库里的servlet代码和jsp代码( 上传图片比实际图片大时,可以用此方法)
来源:互联网 发布:mysql数据库事务处理 编辑:程序博客网 时间:2024/04/28 22:08
common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件
下面是个html的上传页面:
现在介绍上传文件到服务器,下面只写出相关代码:
以sql2000为例,表结构如下:
字段名:name filecode
类型: varchar image
数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
代码如下:
这样就实现了上传文件至数据库
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.util.regex.*; import org.apache.commons.fileupload.*; public class upload extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GB2312"; //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out=response.getWriter(); try { DiskFileUpload fu = new DiskFileUpload(); // 设置允许用户上传文件大小,单位:字节,这里设为2m fu.setSizeMax(2*1024*1024); // 设置最多只允许在内存中存储的数据,单位:字节 fu.setSizeThreshold(4096); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 fu.setRepositoryPath("c:\\windows\\temp"); //开始读取上传信息 List fileItems = fu.parseRequest(request); // 依次处理每个上传的文件 Iterator iter = fileItems.iterator(); //正则匹配,过滤路径取文件名 String regExp=".+\\\\(.+)$"; //过滤掉的文件类型 String[] errorType={".exe",".com",".cgi",".asp"}; Pattern p = Pattern.compile(regExp); while (iter.hasNext()) { FileItem item = (FileItem)iter.next(); //忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { String name = item.getName(); long size = item.getSize(); if((name==null||name.equals("")) && size==0) continue; Matcher m = p.matcher(name); boolean result = m.find(); if (result){ for (int temp=0;temp<errorType.length;temp++){ if (m.group(1).endsWith(errorType[temp])){ throw new IOException(name+": wrong type"); } } try{ //保存上传的文件到指定的目录 //在下文中上传文件至数据库时,将对这里改写 item.write(new File("d:\\" + m.group(1))); out.print(name+" "+size+"<br>"); } catch(Exception e){ out.println(e); } } else { throw new IOException("fail to upload"); } } } } catch (IOException e){ out.println(e); } catch (FileUploadException e){ out.println(e); } } }
下面是个html的上传页面:
<h1>文件上传演示</h1> <form name="uploadform" method="POST" action="/upload" ENCTYPE="multipart/form-data"> <table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF"> <tr><td width="100%" colspan="2"> 文件1:<input name="x" size="40" type="file"> </td></tr> <tr><td width="100%" colspan="2"> 文件2:<input name="y" size="40" type="file"> </td></tr> <tr><td width="100%" colspan="2"> 文件3:<input name="z" size="40" type="file"> </td></tr> </table> <br/><br/> <table> <tr><td align="center"><input name="upload" type="submit" value="开始上传"/></td></tr> </table> </form>
现在介绍上传文件到服务器,下面只写出相关代码:
以sql2000为例,表结构如下:
字段名:name filecode
类型: varchar image
数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
代码如下:
try{ //item.write(new File("d:\\" + m.group(1)));//这段代码如果不去掉,将一同写入到服务器中 int byteread=0; InputStream inStream=item.getInputStream(); //读取输入流,也就是上传的文件内容 pstmt.setString(1,m.group(1)); pstmt.setBinaryStream(2,inStream,(int)size); pstmt.executeUpdate(); inStream.close(); out.println(name+" "+size+"<br>"); }
这样就实现了上传文件至数据库
==========================================================================
下面代码是在ORACRE中存储任何文件!!
字段类型为long row,看你是否可以用上!!!
其中中文路径的问题已经解决!
package aaa; //加入相应的包 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.sql.*; import java.sql.PreparedStatement; import java.sql.Connection; public class in extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GBK"; //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); conn conn=new conn(); //转换字符串的编码格式 request.setCharacterEncoding("GBK"); //conn.Getconnect(). //从上一页面获取相应插入的信息 String XMDM=request.getParameter("XMDM"); String ZLLX=request.getParameter("ZLLX"); String SBRQ=request.getParameter("SBRQ"); String ZLNR=request.getParameter("ZLNR"); //将得到的文件路径转换成为相应的文件格式! java.io.File file=new java.io.File(ZLNR); //取得文件的长度!! long l1=file.length(); int s=(int)l1; String ZLCD=String.valueOf(s); //取得文件名及后缀!! String ZLHZ=file.getName() ; //将文件转换成为数据流!! FileInputStream str=new FileInputStream(ZLNR); // String sql="insert into AAA(A,B) values(?,?)"; String sql="insert into GZ_XGZL(XMDM,ZLLX,ZLMC,SBRQ,ZLNR,ZLCD) values(?,?,?,?,?,?)"; //向数据库读流!!连接数据库插入数据。 try { PreparedStatement pstmt = conn.Getconnect().prepareStatement(sql); pstmt.setString(1,XMDM); pstmt.setString(2,ZLLX); pstmt.setString(3,ZLHZ); pstmt.setString(4,SBRQ); pstmt.setBinaryStream(5,str,s); pstmt.setString(6,ZLCD); pstmt.execute(); } catch (SQLException ex) { } response.sendRedirect("update.jsp"); }}
===========================================
下面这个适用初学者
<%@ page contentType="text/html; charset=gb2312"%> <%@ include file="/DataIni/DataOpen.jsp"%> <%@ include file="/ScriptLib/Init.jsp"%> <% int iTotalByte,iTotalRead,iReadByte; iTotalByte=request.getContentLength(); iTotalRead=0; iReadByte=0; byte[] Buffer=new byte[iTotalByte]; if(iTotalByte>0) { for(;iTotalRead<iTotalByte;iTotalRead+=iReadByte) { try { iReadByte=request.getInputStream().read(Buffer,iTotalRead,iTotalByte-iTotalRead); } catch(Exception e) { e.printStackTrace(); } } String strContentType=request.getContentType(); //数据处理开始 String strBuffer=new String(Buffer); %><!--<br>表单数据:<br>strBuffer<br>--><% String strBoundary="--"+strContentType.substring(strContentType.lastIndexOf("=")+1,strContentType.length()); String strArray[]=strBuffer.split(strBoundary); String strSubString; int iBegin,iEnd; iBegin=0;iEnd=0; String strFieldName=""; String strFieldValue=""; String strFilePath=""; String strFileName=""; String strFileType=""; boolean bTrue; bTrue=false; int iLocation=0; for(int iIndex=1;iIndex<strArray.length-1;iIndex++) { strSubString=strArray[iIndex]; iBegin=strSubString.indexOf("name=\"",0); if(iBegin!=-1) { strFieldName="";strFieldValue=""; strFilePath="";strFileName="";strFileType=""; iEnd=strSubString.indexOf("\"",iBegin+6); strFieldName=strSubString.substring(iBegin+6,iEnd); iBegin=strSubString.indexOf("filename=\"",0); if(iBegin!=-1) { bTrue=true; } iEnd=strSubString.indexOf("\r\n\r\n",0); if(bTrue==true) { //文件路径 strFilePath=strSubString.substring(iBegin+10,strSubString.indexOf("\"",iBegin+10));strFileName=strFilePath.substring(strFilePath.lastIndexOf("\\")+1); strFileType=strSubString.substring(strSubString.indexOf("Content-Type: ")+14,strSubString.indexOf("\r\n\r\n")); %><!--<br>文件类型:<br>strFileType<br>--><% //文件数据 iBegin=strSubString.indexOf("\r\n\r\n",iBegin); strFieldValue=strSubString.substring(iBegin+4); strFieldValue=strFieldValue.substring(0,strFieldValue.lastIndexOf("\n")-1); %><!--<br>文件路径:<br>strFilePath<br>文件名称:<br>strFileName<br>--><% byte[] pFile=strFieldValue.getBytes(); byte[] pFileExtend=new byte[pFile.length]; iLocation=strBuffer.indexOf("filename=\"",iLocation); for(int kIndex=iLocation;kIndex<iTotalByte-2;kIndex++) { if(Buffer[kIndex]==13&&Buffer[kIndex+2]==13) {iLocation=kIndex+4;break;} } for(int nIndex=0;nIndex<pFile.length;nIndex++) { pFileExtend[nIndex]=Buffer[iLocation+nIndex]; } /* //保存到Local Disk; FileOutputStream pFileOutputStream=new FileOutputStream("F:\\Site_ColligateStatistic\\UploadFile\\"+strFileName); pFileOutputStream.write(pFileExtend); pFileOutputStream.close(); */ session.putValue(strFieldName+"_FileType",strFileType); session.putValue(strFieldName+"_FilePath",strFilePath); session.putValue(strFieldName+"_FileName",strFileName); session.putValue(strFieldName,pFileExtend); } else { strFieldValue=strSubString.substring(iEnd+4); strFieldValue=strFieldValue.substring(0,strFieldValue.lastIndexOf("\n")-1); session.putValue(strFieldName,strFieldValue); } bTrue=false; } %><!--<br>表单域名:<br>strFieldName<br>表单域值:<br>strFieldValue<br>--><% } //数据处理结束 String TypeValue,Id,ItemID; TypeValue=(String)session.getValue("TypeValue"); ItemID=(String)session.getValue("ItemId"); %><br><%=TypeValue%><br><%=ItemID%><br><% if(TypeValue!=null) { int iDoAction; iDoAction=0; if(TypeValue.indexOf("Add",0)!=-1) {iDoAction=1;} if(TypeValue.indexOf("Modify")!=-1) {iDoAction=2;} if(TypeValue.indexOf("Del")!=-1) {iDoAction=3;} odbcQuery=""; Id=(String)session.getValue("RecordId"); switch(iDoAction) { case 1: odbcStmt.executeUpdate("insert into GeneralSystem(ItemID,Category,Subject,Body,History,Type) values('"+ItemID+"','"+(String)session.getValue("Category")+"','"+(String)session.getValue("Subject")+"','"+(String)session.getValue("Body")+"',Now(),'"+(String)session.getValue("OLEFile_FileType")+"')"); odbcRs=odbcStmtUpdate.executeQuery("select top 1 * from GeneralSystem order by ID desc"); if(odbcRs.next()) { byte[] OLEFile=(byte[])session.getValue("OLEFile"); odbcRs.updateBinaryStream("OLEFile",new ByteArrayInputStream(OLEFile),OLEFile.length); odbcRs.updateRow(); odbcRs.close(); response.sendRedirect("/System/GeneralSystem/List.jsp"); } break; case 2: response.sendRedirect("/System/GeneralSystem/List.jsp"); break; case 3: odbcStmt.executeUpdate("delete from GeneralSystem where ID="+Id); response.sendRedirect("/System/GeneralSystem/List.jsp"); break; } } } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title></title> <link rel="stylesheet" type="text/css" href="/StyleLib/Default_Style_Sheet.css"> </head> <body onload="window.alert('动作失败,系统取消操作!');window.location.href='/System/GeneralSystem/List.jsp';"> <%@ include file="/TemplateLib/Head.jsp"%> <%@ include file="/TemplateLib/Tail.jsp"%> <%@ include file="/DataIni/DataClose.jsp"%> </body> </html>
=====================================================================
JSP文件上传代码
UploadFileExample1.jsp
view plaincopy to clipboardprint?
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <html> <head> <title>文件上传</title> </head> <body> <form name="form1" method="post" action="AcceptUploadFile.jsp" enctype="multipart/form-data"> upload file: <label> <input type="file" name="upfile" size="50" /> </label> <p> <label> <input type="submit" name="Submit" value="提交" /> </label> </p> </form> <script type='text/javascript'> //<![CDATA[ document.getElementById('processtime').innerHTML="<span style='font-size: 8pt; font-family: Georgia;'>Run in 158 ms, 10 Queries, Gzip enabled.</span>"; //]]> </script></body> </html> <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><html><head><title>文件上传</title></head><body><form name="form1" method="post" action="AcceptUploadFile.jsp" enctype="multipart/form-data">upload file:<label><input type="file" name="upfile" size="50" /></label><p><label><input type="submit" name="Submit" value="提交" /></label></p></form><script type='text/javascript'>//<![CDATA[document.getElementById('processtime').innerHTML="<span style='font-size: 8pt; font-family: Georgia;'>Run in 158 ms, 10 Queries, Gzip enabled.</span>";//]]></script></body></html>AccepteUploadFile.jspview plaincopy to clipboardprint?<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <%@ page import="java.io.*"%> <%! public String codeToString(String str) { String s=str; try { byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s; } catch(Exception e) { return s; } } %> <% String tempFileName=new String("tempFileName1");//接收上传的文件内容的临时文件的文件名 File tempFile1=new File("D:/",tempFileName); FileOutputStream outputFile1=new FileOutputStream(tempFile1); InputStream fileSource1=request.getInputStream();//得到客户端提交的所有数据 byte b[]=new byte[1000]; int n; while((n=fileSource1.read(b))!=-1) { outputFile1.write(b,0,n); //将得到的客户端数据写入临时文件 } outputFile1.close(); fileSource1.close(); RandomAccessFile randomFile1=new RandomAccessFile(tempFile1,"r"); randomFile1.readLine();//读取第一行数据 String FilePath=randomFile1.readLine();//读取第二行数据,这行数据包括了文件的路径和文件名 int position=FilePath.lastIndexOf('\\'); //等到文件名 String filename=codeToString(FilePath.substring(position+1,FilePath.length()-1)); randomFile1.seek(0);//重新定位指针到文件头 long forthEnterPosition=0; int forth=1; //得到第4行回车符号的位置,这是上传文件的开始位置 while((n=randomFile1.readByte())!=-1&&(forth<=4)) if(n=='\n') { forthEnterPosition=randomFile1.getFilePointer(); forth++; } File FileUploadDir=new File("C:/Tomcat5/webapps/ROOT/file/","upload"); FileUploadDir.mkdir(); //生成上传文件的目录 File saveFile1=new File("C:/Tomcat5/webapps/ROOT/file/upload/",filename); RandomAccessFile randomFile2=new RandomAccessFile(saveFile1,"rw"); randomFile1.seek(randomFile1.length()); long endPosition=randomFile1.getFilePointer();//找到上传的文件数据的结束位置,即倒数第4行 int j=1; while((endPosition>=0)&&(j<=4)) { endPosition--; randomFile1.seek(endPosition); if(randomFile1.readByte()=='\n') j++; } randomFile1.seek(forthEnterPosition); long startPoint=randomFile1.getFilePointer(); while(startPoint<endPosition-1) { randomFile2.write(randomFile1.readByte()); startPoint=randomFile1.getFilePointer(); } randomFile2.close(); randomFile1.close(); tempFile1.delete(); out.print("file:"+filename+" succeed upload!<br/>"); %> <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><%@ page import="java.io.*"%><%!public String codeToString(String str){String s=str; try { byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s; } catch(Exception e) { return s; }}%><%String tempFileName=new String("tempFileName1");//接收上传的文件内容的临时文件的文件名File tempFile1=new File("D:/",tempFileName);FileOutputStream outputFile1=new FileOutputStream(tempFile1);InputStream fileSource1=request.getInputStream();//得到客户端提交的所有数据byte b[]=new byte[1000];int n;while((n=fileSource1.read(b))!=-1){outputFile1.write(b,0,n); //将得到的客户端数据写入临时文件}outputFile1.close();fileSource1.close();RandomAccessFile randomFile1=new RandomAccessFile(tempFile1,"r");randomFile1.readLine();//读取第一行数据String FilePath=randomFile1.readLine();//读取第二行数据,这行数据包括了文件的路径和文件名int position=FilePath.lastIndexOf('\\'); //等到文件名String filename=codeToString(FilePath.substring(position+1,FilePath.length()-1));randomFile1.seek(0);//重新定位指针到文件头long forthEnterPosition=0;int forth=1; //得到第4行回车符号的位置,这是上传文件的开始位置while((n=randomFile1.readByte())!=-1&&(forth<=4))if(n=='\n'){ forthEnterPosition=randomFile1.getFilePointer(); forth++;}File FileUploadDir=new File("C:/Tomcat5/webapps/ROOT/file/","upload");FileUploadDir.mkdir(); //生成上传文件的目录File saveFile1=new File("C:/Tomcat5/webapps/ROOT/file/upload/",filename);RandomAccessFile randomFile2=new RandomAccessFile(saveFile1,"rw");randomFile1.seek(randomFile1.length());long endPosition=randomFile1.getFilePointer();//找到上传的文件数据的结束位置,即倒数第4行int j=1;while((endPosition>=0)&&(j<=4)){endPosition--; randomFile1.seek(endPosition); if(randomFile1.readByte()=='\n') j++;}randomFile1.seek(forthEnterPosition);long startPoint=randomFile1.getFilePointer();while(startPoint<endPosition-1){randomFile2.write(randomFile1.readByte()); startPoint=randomFile1.getFilePointer();}randomFile2.close();randomFile1.close();tempFile1.delete();out.print("file:"+filename+" succeed upload!<br/>");%>
- 上传图片并保存到数据库里的servlet代码和jsp代码( 上传图片比实际图片大时,可以用此方法)
- php上传图片的代码并保存到数据库
- php上传图片的代码并保存到数据库
- php上传图片的代码并保存到数据库
- jsp上传图片servlet代码
- 求一段smartupload上传图片的代码,不需要保存到数据库,但是想在jsp页面选中文件夹图片后,立马可以显示
- jsp图片上传代码
- 上传图片并保存到数据库
- spring上传图片并保存到数据库
- servlet+jsp同一个页面上传文字图片,并将图片地址保存到MYSQL
- 图片上传并保存到数据库以及显示图片
- java jsp servlet fileupload上传图片时获取上传图片尺寸(宽高)的代码
- php实现上传图片保存到数据库的方法
- 记录一个可以上传图片的代码
- JSP上传显示图片代码
- JSP实现图片上传代码
- jsp图片上传完整代码
- jsp+servlet图片上传
- 黑马程序员-MD5加密实现
- 关于平台化
- iOS的主要框架介绍
- MyEclipse下测试连接MySQL数据库
- Spring3 + jdbcTemplate + mysql 配置过程
- 上传图片并保存到数据库里的servlet代码和jsp代码( 上传图片比实际图片大时,可以用此方法)
- 防止多人操作更新冲突覆盖
- ruby小例子-动态执行,绑定,线程
- SQL 通过主表查询出主表的所有子表
- .Net代码检查工具 Gendarme
- 四极管:转一个解析linux内核I2C体系结构的例子,说的比较清楚
- Flex Viewer本地化以及相关配置
- IE6 margin 双倍边距解决方案
- ubuntu-10.10自动挂载windows分区