当前位置:  技术问答>java相关

图片上传的问题!

    来源: 互联网  发布时间:2015-05-11

    本文导语:  下面的程序上传到一目录下可以,但我在那里调用最下面的update方法,怎么调用才能把图片保存到数据库里呢? import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.sql.*; public class Upload...

下面的程序上传到一目录下可以,但我在那里调用最下面的update方法,怎么调用才能把图片保存到数据库里呢?
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;

public class UploadFileServlet extends HttpServlet
{
public void doPost(HttpServletRequest req,
                      HttpServletResponse res)
        throws IOException, ServletException{
String uploadpath="..\upload\";
boolean rc=false;
long fileleng=0;
final int NONE=0;//状态码,表示没有特殊操作
final int DATAHEADER=1;//表示下一行要读到报头信息
final int FILEDATA=2;//表示下一行要读到表单域的文本值
final int FIELDDATA=3;//表示下一行要读到的是上传文件的二进制数据
//请求消息实体的总长度(请求消息中除消息头之外的数据长度)
int totalbytes=req.getContentLength();
//容纳请求消息的实体数组
byte[] b=new byte[totalbytes];
//请求消息类型
String contentType=req.getContentType();
String fieldname="";//表单域的名称
String fieldvalue="";//表单域的值
String filename="";//上传文件的名称
String boundary="";//分界符字符串
String lastboundary="";//结束分界符字符串
int fileSize=0;//文件长度
//容纳表单域的名称/值的哈希表
Hashtable formfields=new Hashtable();
//在消息头类型中找到分界符的定义
int pos =contentType.indexOf("boundary=");
String fileID;//上传的文件ID
if(pos!=-1){
pos+="boundary=".length();
boundary="--"+contentType.substring(pos);//解析出分界符
lastboundary=boundary+"--";//得到结束分界符
}
int state=NONE;//起始状态为NONE
//得到请求消息的数据输入流
DataInputStream in=new DataInputStream(req.getInputStream());
in.readFully(b);//根据长度将消息实体的内容读入到字节数组b中
in.close();//关闭数据流
String reqcontent=new String(b);//从字节数组中得到表示实体的字符串
//从字符串中得到输出缓冲流
BufferedReader reqbuf=new BufferedReader(new StringReader(reqcontent));
//设置循环标志
boolean flag=true;
int i=0;
while(flag==true){
String s=reqbuf.readLine();                             
if(s==lastboundary||s==null)break;
switch(state){
case NONE:
if(s.startsWith(boundary)){
//如果读到分界符,则表示下一行是一个头信息
state=DATAHEADER;
i+=1;
}
case DATAHEADER:
s=reqbuf.readLine();   
pos=s.indexOf("filename=");
//先判断出这是一个文本表单域的头信息,还是一个上传文件的头信息
if(pos==-1){
//如果是文本表单域的头信息,解析出表单域的名称
pos=s.indexOf("name=");
if(pos!=-1){
pos+="name=".length()+1;
s=s.substring(pos);
int l=s.length();
s=s.substring(0,l-1);
fieldname=s;//表单域的名称放入到fieldname
state=FIELDDATA;//设置状态码,准备读取表单域的值
}else
break;
}
else{
//如果是文件数据的头,先存储这一行,用于在字节数组中定位
String temp=s;
//先解析出文件名
pos=s.indexOf("filename=");
pos+="filename=".length()+1;//1表示后面的"占的位数
s=s.substring(pos);
int l=s.length();
s=s.substring(0,l-1);
pos=s.lastIndexOf("\");
s=s.substring(pos+1);
filename=s;//文件名存入filename
//下面的这一部分从字节数组中取出文件的数据
pos=byteIndexOf(b,temp,0);//定位行
//定位下一行,2表示一个回车和一个换行占2个字节
b=subBytes(b,pos+temp.getBytes().length+2,b.length);
//在读一行信息,是这一部分数据的Content-type
s=reqbuf.readLine();
//设置文件输入流,准备写文件
File f=new File(uploadpath+filename);
DataOutputStream fileout=new DataOutputStream(new FileOutputStream(f));

//字节数组再往下一行,4表示两个回车换行占4个字节,本行的回车换行2个字节,Content-type的下一行是回车换行表示的空行,占2个字节
//得到文件数据的起始位置
b=subBytes(b,s.getBytes().length+4,b.length);
pos=byteIndexOf(b,boundary,0);//定位文件数据的结尾
b=subBytes(b,0,pos-1);//取得文件数据
//fin.write(b,0,b.length-1);
fileout.write(b,0,b.length-1);//将文件数据存盘

fileSize=b.length-1;//文件长度存入fileSize
rc=update(fin,fileleng,filename);
state=FILEDATA; 
}
break;
case FIELDDATA:
//读出表单域的值
s=reqbuf.readLine();
fieldvalue=s;//存入fieldvalue
formfields.put(fieldname,fieldvalue);
state=NONE;
break;
case FILEDATA:
//如果是文件数据不进行分析,直接读过去
while((!s.startsWith(boundary))&&(!s.startsWith(lastboundary))){
s=reqbuf.readLine();
if(s.startsWith(boundary)){
state=DATAHEADER;
break;
}
//else break;
}
break;
}
}
//指定内容类型,并且可显示中文
res.setContentType("text/html;charset=gb2312");
PrintWriter out=res.getWriter();
out.println("");
out.println("文件上传结果");
out.println("");
out.println("文件上传结果");
out.println("ID为"+rc+"的文件"+filename+"||"+fileleng+"已经上传!"+"文件长度:"+fileSize+"字节");
out.println("");
out.println("");
}
/**
**字节数组中的indexOf函数,与String类中的indexOf类似
**b要搜索的字节数组
**s要找的字符串
**start搜索的起始位置
**如果找到,返回s的第一个字节在buffer中的下标,没有则返回-1
*/
private static int byteIndexOf(byte[] b,String s,int start)
{
return byteIndexOf(b,s.getBytes(),start);
}
/**
**字节数组中的indexOf函数,与String类中的indexOf类似
**b源字节数组
**s目标字节数组
**start搜索的起始位置
**如果找到,返回s的第一个字节在b中的下标,没有则返回-1
*/
private static int byteIndexOf(byte[] b,byte[] s,int start)
{
int i;
if(s.length==0)
{
return 0;
}
int max=b.length-s.length;
if(maxmax)
return -1;
if(start

    
 
 

您可能感兴趣的文章:

  • 100分求一个上传图片的bean,要求上传后能改变文件名称
  • Jquery uploadify图片上传插件无法上传的解决方法
  • jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
  • codeigniter上传图片不能正确识别图片类型问题解决方法
  • 图片上传控件 Dropare
  • 上传图片前判断文件格式与大小验证文件是不是图片
  • C#判断上传文件是否是图片以防止木马上传的方法
  • HTML5图片拖放上传 Droparea
  • 如何将一幅图片上传并保存在数据库中?
  • 如何实现图片上传、缩放并存放到数据库中
  • 如何实现图片上传
  • PHP上传图片、删除图片的简单示例代码
  • 请教:怎么用JSP把图片上传到服务器SQL Server数据库?
  • 如何实现图片上传啊,而且我想把它记录在SQL SERVER中!!有空请帮我!!!
  • 通过网页上传图片到服务器,用什么方法比较好呢?(applet?)
  • jsp中如何上传图片进数据库,并且读出来(快来啊,大兄们,笨苯,你在哪里呀,你在哪里:))
  • CSS图片拼合生成器只需上传zip包即可
  • 基于C# winform实现图片上传功能的方法
  • asp.net上传图片加防伪图片水印并写入数据库的代码一例
  • 后台上传图片(巨难问题)
  • 加图片问题,我想在警告时加一个图片,程序如下,但我的图片出不来,各位高手帮帮忙
  • 网站图片路径的问题:绝对路径/虚拟路径
  • ejb的bmp向oracle表插入图片记录的问题!
  • 用C写图片浏览器遇到的问题
  • 菜鸟:关于在button上加图片的问题!
  • 如何实现一个图片下拉列表的问题,请各位大侠不吝赐教,谢谢!!!
  • NANO-X中关于图片的问题
  • 解决图片路径中含有中文在jsp下不能正常显示问题
  • 解决jsp页面使用网络路径访问图片的乱码问题
  • Java中图片的问题
  • 关于循环显示图片的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • iphone cocos2d 精灵的动画效果(图片,纹理,帧)CCAnimation实现
  • JS点击图片改变图片图径并用正则表达式取图片名的代码
  • Python3通过request.urlopen实现Web网页图片下载
  • Android 图片浏览器 雪梦图片浏览器
  • android中知道图片name时获取图片的简单方法
  • css为图片设置背景图片
  • android图像绘制(六)获取本地图片或拍照图片等图片资源
  • 有没有可以从已知图片里过滤出,不规则图片的滤镜??
  • 怎么让客户端从服务器下载图片后,看不到图片的最后修改时间
  • 如何将一个彩色bmp图片转换成黑白图片,急用
  • 查询图片,图片文件存放在数据库中好,还是存放路径好,是否有更好的解决办法
  • 图片和jlabel的大小不相同,怎样让图片充满整个jlabel?
  • PHP正则匹配图片并给图片加链接详解
  • phpphp图片采集后按原路径保存图片示例
  • jquery图片淡入淡出与图片切换效果的例子
  • linux能不能像xp那样子以幻灯片方式查看图片。我在一个文件夹里面有几张图片,想进行挑选。用幻灯片查看的方式比较方便
  • 我想调用图片的单击事件,再用函数动态加载图片,这样为什么不能实现???
  • 请问如何在JAVAMAIL中显示图片,如果附件中不是图片,如何给它加上链接让用户下载呢?
  • jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
  • linux系统下面,有10g的图片文件夹,现在要手动移到另一个目录,有没有比较快的只花几秒钟就搞定的方法来移动这些图片呢?
  • Android中将一个图片切割成多个图片的实现方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3