您的位置:首页 > 编程语言

上传文件form表单enctype="multipart/form-data"传值解决办法(代原代码)

2013-12-14 20:47 1066 查看
最近做的一个项目里遇到一个问题,就是如何在上传文件的表单里传递其它的变量,因为一但form表单用了enctype="multipart/form-data"类型后,所有的值都是以二进制进行传递的,所以当我们想取出这个表单里传递过来的其它变量的时候,就会遇到一个问题,那就是用request取不到传递过来的变量。在网上找了很多资料,也都是大至说一下,在这里我就借花献佛发个完整的原代码解决这个问题!!!

工程目录如下:



两个jar可以去apache上下载:

http://commons.apache.org/fileupload/

http://commons.apache.org/io/

四个文件原代码分别为:

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

<servlet-name>fileUpload</servlet-name>

<servlet-class>servlet.FileUpload</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>fileUpload</servlet-name>

<url-pattern>/fileUpload</url-pattern>

</servlet-mapping>

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>servlet.EncodeFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- clear temporary file when delete the affix ,

the temporary file path=C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp-->

<listener>

<listener-class>

org.apache.commons.fileupload.servlet.FileCleanerCleanup

</listener-class>

</listener>

<listener>

<listener-class>

org.apache.commons.fileupload.servlet.FileCleanerCleanup

</listener-class>

</listener>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<form action="<%=path %>/fileUpload" method="post" enctype="multipart/form-data">

文件:

<input type="file" name="file">

姓名:

<input name="name" />

<input type="hidden" name="add" value="深圳"/>

<input type="submit">

</form>

</body>

</html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'success.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

user.name=${user.name}<br>

user.add=${user.add}<br>

file:=<a href="${affix.affixUrl}">${affix.affixName}</a>

</body>

</html>

Affix.java

package model;

import java.util.Date;

public class Affix {

private String tableName;

private Long tableRecordId;

private String affixName;

private String affixUrl;

private long size;

private long creatorId;

private Date createDate;

private Long updaterId;

private Date updatorDate;

public String getTableName() {

return tableName;

}

public void setTableName(String tableName) {

this.tableName = tableName;

}

public Long getTableRecordId() {

return tableRecordId;

}

public void setTableRecordId(Long tableRecordId) {

this.tableRecordId = tableRecordId;

}

public String getAffixName() {

return affixName;

}

public void setAffixName(String affixName) {

this.affixName = affixName;

}

public String getAffixUrl() {

return affixUrl;

}

public void setAffixUrl(String affixUrl) {

this.affixUrl = affixUrl;

}

public long getSize() {

return size;

}

public void setSize(long l) {

this.size = l;

}

public long getCreatorId() {

return creatorId;

}

public void setCreatorId(long creatorId) {

this.creatorId = creatorId;

}

public Date getCreateDate() {

return createDate;

}

public void setCreateDate(Date createDate) {

this.createDate = createDate;

}

public Long getUpdaterId() {

return updaterId;

}

public void setUpdaterId(Long updaterId) {

this.updaterId = updaterId;

}

public Date getUpdatorDate() {

return updatorDate;

}

public void setUpdatorDate(Date updatorDate) {

this.updatorDate = updatorDate;

}

}

User.java

package model;

public class User {

private String name;

private String add;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAdd() {

return add;

}

public void setAdd(String add) {

this.add = add;

}

public int getAge() {

return age;

}

public void setAge(int i) {

this.age = i;

}

}

EncodeFilter.java

package servlet;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class EncodeFilter implements Filter {

private String encoding = null;

public void destroy() {

encoding = null;

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain filterChain) throws IOException, ServletException {

if (encoding != null)

request.setCharacterEncoding(encoding);

filterChain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

encoding = filterConfig.getInitParameter("encoding");

}

}

FileUpload.java

package servlet;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

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 model.Affix;

import model.User;

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 FileUpload extends HttpServlet {

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

String tempPath = "d:\\file\\";

File file = new File(tempPath);

if(!file.exists()){

file.mkdir();

}

System.out.println(ServletFileUpload.isMultipartContent(request));

DiskFileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler

ServletFileUpload upload = new ServletFileUpload(factory);

// upload.setSizeMax(1024 * 1024 * 50L);

// Parse the request

List items = null;

try {

items = upload.parseRequest(request);

} catch (FileUploadException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

byte data[] = new byte[1024];

int i = 0;

Affix affix = null;

User user = new User();

if (items != null)

for (Iterator iterator = items.iterator(); iterator.hasNext();) {

FileItem item = (FileItem) iterator.next();

if (item.isFormField()) {

System.out.print(new String(item.getString("UTF-8")));

if ("add".equals(item.getFieldName())) {

user.setAdd(new String(item.getString("UTF-8")));

} else if ("name".equals(item.getFieldName())) {

user.setName(new String(item.getString("UTF-8")));

} else if ("age".equals(item.getFieldName())) {

user.setAge(Integer.parseInt(item.getString()));

}

// BeanUtils.setFieldValue(user, item.getFieldName(), item

// .getString());

} else {

String fileName = item.getName().substring(

item.getName().lastIndexOf(File.separator) + 1,

item.getName().length());

InputStream inputStream = item.getInputStream();

// InputStream inputStream = request.getInputStream();

OutputStream outputStream = new FileOutputStream(tempPath

+ fileName);

while ((i = inputStream.read(data)) != -1) {

outputStream.write(data, 0, i);

}

inputStream.close();

outputStream.close();

affix = new Affix();

affix.setCreateDate(new Date());

affix.setTableName("t_test_user");

affix.setSize(item.getSize());

affix.setAffixUrl(tempPath + fileName);

affix.setAffixName(fileName);

}

}

// userService.addUser(user);

// fileService.addFile(file)

request.setAttribute("user", user);

request.setAttribute("affix", affix);

request.getRequestDispatcher("/success.jsp").forward(request, response);

// response.sendRedirect("success.jsp");

}

}

代码有点乱,工作有点忙在这里就不改了。

执行结果如图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐