在jsp中,表单中设置为ENCTYPE= "multipart/form-data " 之后,后天servlet无法通过request来获得表单提交的值了,因为传递的是二进制。
1、想知道如何不用其他组件来完成接收表单传递过来的值尼?
2、我表单中的值包括图片和文字(类似于发微博的那个表单一样,即可以发文字也可以上传图片)。请问我表单设置为ENCTYPE= "multipart/form-data " 之后,我应该怎么在servlet中区分我接收的值是图片还是发表的文字尼。

解决方案 »

  1.   


    import java.io.File;
    import java.io.IOException;
    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.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadServlet extends HttpServlet
    {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
    {
    DiskFileItemFactory factory = new DiskFileItemFactory();

    String path = req.getRealPath("/upload");

    factory.setRepository(new File(path));
    factory.setSizeThreshold(1024 * 1024);

    ServletFileUpload upload = new ServletFileUpload(factory);

    try
    {
    List<FileItem> list = (List<FileItem>)upload.parseRequest(req);

    for(FileItem item : list)
    {
    String name = item.getFieldName();

    if(item.isFormField())
    {// 普通表单值
    String value = item.getString();
    }
    else
    {// 上传文件
    String value = item.getName();

    int start = value.lastIndexOf("\\");
    String fileName = value.substring(start + 1); item.write(new File(path, fileName));
    //
    // OutputStream os = new FileOutputStream(new File(path, fileName));
    //
    // InputStream is = item.getInputStream();
    //
    // byte[] buffer = new byte[400];
    //
    // int length = 0;
    //
    // while((length = is.read(buffer)) != -1)
    // {
    // os.write(buffer, 0, length);
    // }
    //
    // is.close();
    // os.close();
    }
    }

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

    req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
    }
    }
      

  2.   

    1.不使用工具的话可以用request.getInputStream(),可以得到post过来的东西,然后再自己解析2.至于图片和文字等你看到上面的post的内容就明白了,自己解析起来比较麻烦,要注意的地方蛮多的,你还是用工具吧
      

  3.   


    感谢了,已经得到post的值了,正在解析中
      

  4.   

    用request.getInputStream()去得到,不管是文字还是图片都变成流成的形式,然后 每个值与另一个值之的间隔好像是有一个=====================的标记,具体多少个=我记不清了。
      

  5.   

    不用自己解析,用apache的fileupload工具类就行了,自己搜搜看
      

  6.   

    用request.getInputStream();得到了一串------------TtGTLZCcPNpxX7aEkO8WIu--,应该怎么从这段中区分我的文字和图片啊!