同一表单上传文件并提交表单值

  • 上传图片和文件form的属性应该是enctype="multipart/form-data",字符将转成二进制流,因此request.getParameter(“user_type”)是得不到值。
  • 默认情况,传递参数编码格式是application/x-www-form-urlencoded,不能用于文件上传。

本文主要介绍表单中上传文件并提交表单值,采用apache的commmon-upload jar包。也可以参考我的博客中另一种实现方式
【同一表单上传头像并提交文本值】

一、准备:

  • commons-fileupload-1.3.jar
  • commons-logging-1.1.1.jar
  • commons-io-2.2.jar
  • commons-lang3-3.2.jar

二、代码:

2.1 html
<%@ page contentType="textml;charset=utf-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="UploadServlet" method="post" enctype="multipart/form-data">
        <input type="text" name="intro">
        <input type="file" name="f1">
        <input type="submit" value="上传">
    </form>
</body>
<html>
2.2 servlet
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        List items = null;
        try {
            items = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        } // 解析request请求
        Iterator iter = items.iterator();
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            if (item.isFormField()) {  // 如果是表单域 ,就是非文件上传元素
                String name = item.getFieldName(); // 获取name属性的值
                String value = item.getString(); // 获取value属性的值
                if (item.getFieldName().equals("intro")) {
                    System.out.println(value);
                }
            } else {
                String fieldName = item.getFieldName(); // 文件域中name属性的值
                String fileName = item.getName(); // 文件的全路径,绝对路径名加文件名
                String contentType = item.getContentType(); // 文件的类型
                long size = item.getSize(); // 文件的大小,以字节为单位
                File saveFile = new File("D:/test.jpg"); // 定义一个file指向一个具体的文件
                try {
                    item.write(saveFile);// 把上传的内容写到一个文件中
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }


END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值