enctype="multipart/form-data"的表单无法获取表单中除了type=file以外的其他参数 commons-fileupload 获取除file外其他参数

大家会发现,enctype="multipart/form-data"的表单提交后,在后台无法用传统的request.getParameter获取其他参数

我个人理解是因为每个参数都用流的形式处理了,需要特别的方式才能获取

本文使用commons-fileupload 获取除file外其他参数

HTML代码:

                        <form id="uploadFileForm" action="UploadServlet" target="hiddenFrame" method="post" enctype="multipart/form-data">
                            <input id="fileInput" type="file" onchange="uploadFile();" name="upload" >
                            <input type="hidden" value="/image/" name="directory">
                        </form>

Servlet代码:

package UI.FileManage;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

    @SuppressWarnings("unchecked")
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String errorMessage = null;
        try {
            DiskFileItemFactory fac = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(fac);
            upload.setHeaderEncoding("utf-8");
            List fileList = null;
            fileList = upload.parseRequest(request);

            String dir = ((FileItem)fileList.get(1)).getString();   //获取directory参数
            if (dir == null) {
                dir = "/";
            }
            String savePath = getServletContext().getRealPath("/test" + dir);
            System.out.println("save at:" + savePath);
            File f1 = new File(savePath);
            if (!f1.exists()) {
                f1.mkdirs();
            }
            
            Iterator<FileItem> it = fileList.iterator();
            String name = "";
            while (it.hasNext()) {
                FileItem item = it.next();
                if (!item.isFormField()) {
                    name = item.getName();
                    File file = new File(savePath + File.separatorChar + name);
                    if (file.exists()) {
                        errorMessage = "该文件已经存在!请重命名后再上传。";
                    }
                    item.write(file);
                    item.delete();  //释放输出流
                }
            }
            if (errorMessage == null) {
                response.getWriter().print("<script> parent.finishUploading(1);</script>");
            } else {
                response.getWriter().print("<script> parent.finishUploading(0,'" + errorMessage + "');</script>");
            }
        } catch (Exception exception) {
            response.getWriter().print("<script> parent.finishUploading(0,'上传失败,请重试。');</script>");
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏西安-晁州

Java基于ssm框架的restful应用开发

好几年都没写过java的应用了,这里记录下使用java ssm框架、jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理、jwt校验、token拦截器等...

1146
来自专栏Danny的专栏

【SSH快速进阶】——Spring IOC容器注入的几种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

853
来自专栏java 成神之路

HttpURLConnection 中Cookie 使用

34712
来自专栏JadePeng的技术博客

spring security实现动态配置url权限的两种方法

标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去...

1120
来自专栏lgp20151222

struts2 可以用ognl拿到值而不可以用el拿到值的解决方法

得到了There is no read method for container的错误

602
来自专栏JAVA高级架构

【原创】自己动手写一个服务网关

1842
来自专栏小白鼠

SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security

只有特定名称或者类型的Bean(通过@ConditionalOnMissingBean修饰)不存在于BeanFactory中时才创建某个Bean

1013
来自专栏后端之路

saiku调用api报错

背景 昨天db扩容 因此将saiku服务关闭 今天生产环境受到一堆报错邮件如下 ? 基于移动端开发同学和报表开发同学都没有发布和修改对应代码 初步考虑是否和配置...

25110
来自专栏码匠的流水账

聊聊session fixation attacks

本文主要讲一下session fixation attacks以及spring security对它的防范。

482
来自专栏天天

java写数据接口

662

扫码关注云+社区