2 sddtlm8 sddtlm8 于 2016.03.03 13:43 提问

multipart/form-data提取不出数据来
 <form id="resiger" name="resiger" method="post" action="Student.servlet" enctype="multipart/form-data">
<input type="text" name="action" value="doNewStudent">.....
<input type="file" name="photo" id="photo" class="wbk"/><span id="photo">
<input type="submit" name="button" id="button" value="添 加" />
      <input type="reset" name="button2" id="button2" value="清 除" />
      <input type="button" name="button3" id="button3" value="返回首页"/>



--没有给表单加上enctype="multipart/form-data"的时候,能够把全部的数据提取出来,如action,只是提取不出文本域的中的文件而已,这是正常的,但是加上enctype="multipart/form-data"之后,却连普通的数据都提取不出来了,让老师看了下代码,他说没什么问题,可能是配置或者哪儿出问题了,但我就是找不出来(我是在servlet中提取的)-------
package com.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import com.commons.db.Pager;
import com.commons.util.ActionResult;
import com.commons.util.Validator;
import com.factory.ServiceFactory;
import com.model.Student;
import com.service.StudentService;
@WebServlet(name="StudentServlet",urlPatterns="/Student.servlet")
public class StudentServlet extends HttpServlet {
    private StudentService studentService=ServiceFactory.getStudentService();
    private static final long serialVersionUID = 1L;

    public StudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String action=request.getParameter("action");
        System.out.println("动作"+action);
        if(action==null){
            this.doNewStudent(request, response);
        }
        else if(action.equals("goPage")){
            this.goPage(request, response);
        }else if(action.equals("goList")){
//          this.goList(request, response);
            this.findAll(request, response);
        }else if(action.equals("doNewStudent")){
            this.doNewStudent(request,response);
        }else if(action.equals("goUpdate")){
            goUpdate(request,response);
        }else if(action.equals("doUpdate")){
            this.doUpdate(request, response);
        }else if(action.equals("doDelete")){
            this.doDelete(request, response);
        }else if(action.equals("fenYe")){
            this.findAll(request, response);
        }

    }
    protected void goPage(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String url="";
        url=request.getParameter("url");
        response.sendRedirect(url);
    }

    protected void goList(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        List<Student> lists=this.studentService.findAllStudent();
        request.getSession().setAttribute("lists", lists);
        response.sendRedirect("adminOperator.jsp");
    }
    protected void doNewStudent(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String name=request.getParameter("name");
        System.out.println(name);
        int age=Integer.parseInt(request.getParameter("age"));
        String sex=request.getParameter("sex");
        String grade=request.getParameter("grade");
        String major=request.getParameter("major");
        String address=request.getParameter("address");
        Part part=request.getPart("photo");
//      获取文件扩展名
        System.out.println("长度是:"+part.getSize());
        String ext = part.getHeader("content-disposition").substring(
                part.getHeader("content-disposition").lastIndexOf(".") + 1,
                part.getHeader("content-disposition").length() - 1);// 获取文件扩展
        part.write(this.getServletContext().getRealPath("photo")+"\\"+ext);
        Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
        String stuPhoto=sdf.format(date);
//      将文件放入到服务器磁盘
        part.write(this.getServletContext().getRealPath("ptoto")+"\\"+stuPhoto);
        Student student=new Student(name, sex, age, grade, major, address, stuPhoto);
        boolean flag=this.studentService.addStudent(student);
        if(flag){
            this.goList(request, response);
        }else{
            request.setAttribute("student", student);
            request.getRequestDispatcher("newStudent.jsp").forward(request, response);
        }

    }
    protected void goUpdate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        String sid=request.getParameter("sid");
        Student student=this.studentService.serchStudnet(sid);
        request.setAttribute("student", student);
        request.getRequestDispatcher("update.jsp").forward(request, response);
    }
    protected void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException,  IOException{
        String sid=request.getParameter("sid");
        String name=request.getParameter("name");
        int age=Integer.parseInt(request.getParameter("age"));
        String sex=request.getParameter("sex");
        String grade=request.getParameter("grade");
        String major=request.getParameter("major");
        String address=request.getParameter("address");
        Part part=request.getPart("photo");
//      获取文件扩展名
        String ext=part.getHeader("content-dispoistion").substring(
                part.getHeader("content-dispoistion").indexOf(".")+1,part.getHeader("content-dispoistion").length()-1);
        part.write(this.getServletContext().getRealPath("photo")+"\\"+ext);
        Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
        String stuPhoto=sdf.format(date);
//      将文件放入到服务器磁盘
        part.write(this.getServletContext().getRealPath("ptoto")+"\\"+stuPhoto);
        Student student=new Student(name, sex, age, grade, major, address, stuPhoto);
        student.setSid(sid);
        boolean flag=studentService.updateStudent(student);
        if(flag){
            this.goList(request, response);
        }else{
            request.setAttribute("student", student);
            request.getRequestDispatcher("update.jsp").forward(request, response);
        }

    }
    protected void doDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String sid=request.getParameter("sid");
        boolean flag=studentService.deleteStudent(sid);
        if(flag){
            this.goList(request, response);
        }else{
        response.sendRedirect("adminOperator.jsp");
        }
    }
    protected void findAll(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String pageNoStr=request.getParameter("pageNo");
        int pageNo=1;
        if(!Validator.isEmpty(pageNoStr)){
            pageNo=Integer.parseInt(pageNoStr);
        }
        long rowCount=studentService.getStusRowCount();
        Pager pager=new Pager(rowCount, 3, pageNo);
        List<Student> stuList=studentService.findAllStudent(pager);
        request.getSession().setAttribute("lists", stuList);
        request.getSession().setAttribute("pager", pager);
        System.out.println(pager.getCurrentPage());
        response.sendRedirect("adminOperator.jsp");
//      return new ActionResult("adminOperator.jsp",true);
    }
}

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.03 14:17
已采纳

你自己用纯Servlet来实现页面文件流的提取,这行Part part=request.getPart("photo");是不能实现的。
你需要自己解析HttpServletRequest对象中的文件流数据。参考该帖九楼:http://bbs.csdn.net/topics/310136006

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 16:10

multipart/form-data 表示你要通过解析binary数据来获取返回的参数

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
表单中"multipart/form-data",获取表单中的值
一般该类型传递的是二进制编码的数据,所以在
flask获取表单以enctype="multipart/form-data"格式发送的数据
最早的HTTP POST是不支持文件上传的,给编程开发带来很多问题。但是在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支持文件上传。所以Content-Type的类型扩充了multipart/form-data用以支持向服务器发送二进制数据。因此发送post请求时候,表单属性enctype共有二个值可选,这
使用multipart/form-data上传文件
1.使用POST发送数据     以POST方式发送数据主要是为了向服务器发送较大量的客户端的数据,它不受URL的长度限制。POST请求将 数据以URL编码的形式放在HTTP正文中,字段形式为fieldname=value,用&分隔每个字段。注意所有的字段都 被作为字符串处理。实际上我们要做的就是模拟浏览器POST 一个表单。以下是IE发送一个登陆表单的POST请 求:
当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法
我们在提交文件时,通常需要提交其他的参数、 比如说下面这个form表单中 有时间,选择那一项病例,图片这几个参数,因为需要上传图片,所有我们需要把form表单加上(enctype="multipart/form-data")这句话【如果不加这句话,我们没法解析form表单中的内容】。加上这句话之后,那么问题来了。 如果你想通过post请求的方式,提交表单,我们在后台通过request.g
multipart/form-data方式上传text以及文件,类似微博发照片
/***actionUrl---地址*params---text参数以及值*files----文件参数以及文件*username---认证用户名*passwd---认证密码*/public static String postFile(String actionUrl, Map params, Map files, String username,String passwd) throws
在表单中加enctype="multipart/form-data" 怎么取得表单值
转载自:  http://blog.csdn.net/lian_zhihui1984/article/details/6822201 当提交表单里包含文件上传的时候,即Form的enctype属性值为multipart/form-data时,后台是无法像普通表单那样通过request.getParameter来获取用户提交的数据的。(说实话,我经常因为忘记这个问题而浪费好多调查时
提交multipart/form-data类型数据
提交multipart/form-data类型数据 举例:工行签名证书上传保存 说明:框架使用的是spring mvc 4,接口测试工具使用postman,本文要实现的功能有: 文件上传 :文件上传信息填写在form-data区域,字段名即文件名,文件内容通过postman控件选择,存储在mysql数据库中类型为BLOB,对
php 获取 multipart/form-data 的raw data
用php做一个转发程序,就是从浏览器收到什么数据,就完整的转发到另外一个url 进行处理, GET, POST 都正常,但是在上传图片的时候,确发现不能上传成功,查资料后了解到。 php://input  ,$HTTP_RAW_POST_DATA 不能用于 enctype="multipart/form-data"  因为 php会试图解析所收到的数据,能解析就放入 $_POST, $_GET
spring put multipart/form-data 获取不到参数
加个拦截器给转换成:  MultipartHttpServletRequest @Bean public MultipartResolver multipartResolver(){ return new CommonsMultipartResolver(); } @Bean public FilterRegistrationBean fi
使用multipart form-data方式post数据到服务器
使用multipart/form-data方式提交数据与普通的post方式有一定区别。multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,其值必须为multipart/form-data。另外还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容,只有这样服务端才能正常解析数据。但是,multipart/form-data的基