用JSP分析multipart/form-data基于表单的文件上传

原创 2004年08月18日 17:21:00

<%
 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_App//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)session.getValue("表单域名")返回表单域值,而(byte[])session.getValue("File上传控件域名")返回的字节数组就可以用new ByteArrayInputStream(byte[])调用updateBinaryStream来更新到数据库了

jsp表单中上传文件 enctype="multipart/form-data"解释

ENCTYPE="multipart/form-data"用于表单里有图片上传。    表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。 ...
  • zlj1217
  • zlj1217
  • 2017-01-30 01:17:42
  • 3093

为什么上传文件的表单需要设置enctype="multipart/form-data"

在学习PHP文件上传的过程中发现,HTML表单需要设置enctype="multipart/form-data"这个属性,虽然不这么设置的确无法上传,但这是为什么呢?...
  • mazhibinit
  • mazhibinit
  • 2015-11-05 20:23:52
  • 14992

multipart/form-data 文件上传表单中 传递参数无法获取的原因!

multipart/form-data 文件上传表单中 传递参数无法获取的原因!
  • zllww123
  • zllww123
  • 2017-08-25 22:01:44
  • 11333

为什么上传文件的表单里面要加一个属性enctype=multipart/form-data?

首先知道enctype这个属性管理的是表单的MIME编码。共有三个值可选: 1、application/x-www-form-urlencoded 2、multipart/form-data 3、te...
  • qq_31780525
  • qq_31780525
  • 2016-09-24 14:13:20
  • 1098

springmvc文件上传与表单为enctype="multipart/form-data" 的数据绑定

最近刚开始接触SpringMVC,项目中copy了个先前项目的一个页面,测试过程中发现表单页面数据无法绑定到Model中传入值全部为NULL,后来发现使用的页面中表单form 使用了 enctype=...
  • kukumolu
  • kukumolu
  • 2017-04-06 08:22:07
  • 1777

SpringMVC中文件上传,添加enctype="multipart/form-data"后表单其他属性为空

最近在做一个小型项目,用SpringMVC+Spring+Mybatis做的,开始没有做图片上传,也没有用Spring MVC做过,以前是用Struts2搞定的,所以很自然的, 在设置form表单上的...
  • qq_31950847
  • qq_31950847
  • 2017-04-08 20:05:33
  • 2043

Node层模拟实现multipart表单的文件上传

Node层模拟实现multipart表单的文件上传进入全屏 有时候就是有这样的需求,Nodejs做webserver,从浏览器端上传文件到后端服务器,Node层只是做一个数据中转,如...
  • cdnight
  • cdnight
  • 2016-04-20 17:57:41
  • 2499

利用form从Jsp到Servlet传值为NULL问题(enctype="multipart/form-data")(fileupload)

1.在application.jsp中,除了要上传的文件之外,还需要将项目名传到对应的servlet中 代码如下: ...
  • qq_37668536
  • qq_37668536
  • 2017-03-22 10:35:56
  • 638

表单 multipart/form-data 如何提交中文乱码

表单 multipart/form-data 如何提交中文乱码解决方案:multipart/form-data 是用来上传文件时的一个类型如果用这个的话,有一个专门的乱码解决的啊**.getStrin...
  • u010271462
  • u010271462
  • 2017-04-14 13:19:16
  • 2745

表单中存在上传文件时设置enctype="multipart/form-data"的问题

(1)在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。 我的ActionServlet并没有用到BeanU...
  • yongshuai185
  • yongshuai185
  • 2017-01-11 10:03:39
  • 1436
收藏助手
不良信息举报
您举报文章:用JSP分析multipart/form-data基于表单的文件上传
举报原因:
原因补充:

(最多只允许输入30个字)