带有其他输入字段的HTML文件上载表单

ben*_*rre 1 html servlets file-upload

我有以下html表单...

<html>
<head><title>Upload Servlet</title></head>
<body><h2>Upload Servlet</h2>

<form name='uploadparams' enctype='multipart/form-data' action='' method='post'>
    <label>Migrate Options From:
        <select name='migrateFrom'>
            <option></option>
            <option value='version 1'>version 1</option>
        </select>
    </label>
    <br/>
    <input type='file' name='zipFile'>
    <br/>
    <input type='hidden' value='willnotshowupinservlet'/>
    <button type='submit'>Submit</button>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

问题是虽然我可以读取http参数名称为"zipFile"的文件,但我的servlet没有看到其他参数"willnotshowupinservlet"和"migrateFrom".文件上传表单只能有一个输入(文件输入)吗?

Bal*_*usC 5

它们确实不能作为常规请求参数使用,因为您已将表单编码设置为multipart/form-data(为了能够在请求正文中包含文件内容,这确实是必需的).您必须解析请求正文符合multipart/form-data规范.getParameter()Servlet API 的调用仅支持表单编码,application/x-www-form-urlencoded该表单编码是enctypeHTML <form>元素的默认值.

Apache Commons FileUpload是一个常用的API来简化工作.或者,当您已经在Servlet 3.0上时,您需要使用注释来指定servlet @MultipartConfig.您可以在此答案中找到两种方法的具体示例.