文件和普通表单同时提交

JSP页面:send.jsp,页面编码为GBK
<body>
<%!
Date now=new Date();
String form=String.format("%tF",now);
%>
<form action="Uploadfile" method="post" enctype="multipart/form-data">
<p>上传的文件是:(文件大小不要超过2MB)<br>
<input type="file" name="file" size="80"/><br/>
<p>文件描述
<input type="text" name="upDe" size="80"/><br>
<p>上传时间
<input type="text" name="uptime" size="80"/><br/>
<input type="submit" value="提交"/>
</form>
</body>

servlet方法,Uploadfile.java

package com.servlet;


import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class Uploadfile extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
String uploadPath=this.getServletContext().getRealPath("/file");
String message=null,content=null,dtme=null;
try{
if(ServletFileUpload.isMultipartContent(request)){ //判断获取的是不是文件
DiskFileItemFactory disk=new DiskFileItemFactory();
disk.setSizeThreshold(20*1024); //设置内存可存字节数
disk.setRepository(disk.getRepository()); //设置临时文件目录
ServletFileUpload up=new ServletFileUpload(disk);
int maxsize=2*1024*1024;
List list=up.parseRequest(request); //获取上传列表
Iterator i=list.iterator(); //创建列表的迭代器
while(i.hasNext()){
FileItem fm=(FileItem)i.next();//遍历列表
if(!fm.isFormField()){
String filePath=fm.getName(); //获取文件全路径名
String fileName="";
int startIndex=filePath.lastIndexOf("\\");
if(startIndex!=-1){ //对文件名进行截取
fileName=filePath.substring(startIndex+1);
}else{
fileName=filePath;
}
if(fm.getSize()>maxsize){
message="文件太大了,不要超过2MB";
break;
}
String fileSize=new Long(fm.getSize()).toString();
if((fileName==null)||fileName.equals("")&&(fileSize.equals("0"))){
message="文件名不能为空,文件大小也不能为零!";
break;
}
File saveFile=new File(uploadPath,fileName);
fm.write(saveFile);//向文件中写入数据
message="文件上传成功!";

}else{
String foename=fm.getFieldName();//获取表单元素名
String con=fm.getString("GBK");
//表单元素
if(foename.equals("upDe")){
content=con;
}else if(foename.equals("uptime")){
dtme=con;
}
}
}

}
}catch(Exception ex){
ex.printStackTrace();

}
request.setAttribute("result", message);
request.setAttribute("upDe", content);
request.setAttribute("dtme", dtme);
request.getRequestDispatcher("message.jsp").forward(request, response);
}
}

message.jsp
<body>
<table border=1>
<tr>
<td>上传情况:</td>
<td><%=request.getAttribute("result") %></td>
</tr>
<tr>
<td>上传情况:</td>
<td><%=request.getAttribute("upDe") %></td>
</tr>
<tr>
<td>上传时间:</td>
<td><%=request.getAttribute("dtme") %></td>
</tr>
</table>

我上传文件是通过commons-fileUpload组件,当然用到的组件是commons-fileupload-1.2.2.jar和commons-io-2.1.jar这个两个包,然后通过上面的方法就可以解决普通表单和文件表单同时提交的问题了,对于FileItem对象的getString()方法有两种重载方式:第一种是无参的,编码方式系统默认的;第二种是有参的,参数就是定义的编码方式,如UTF-8,GBK等。为了避免获取请求数据时出现中文乱码,可以应用设置编码格式的getString()方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值