【问题标题】:Passing parameters along with a multipart/form-data upload form (Java Http Post Upload)与 multipart/form-data 上传表单一起传递参数(Java Http Post Upload)
【发布时间】:2026-01-23 22:55:01
【问题描述】:
我有一个代码库,它目前使用 Post 上传文件,并且 enctype 为 multipart/form-data。现在我需要包含一些表单项,即一些参数也将与文件上传一起传递。我创建了我的 html 表单,但我不能使用 request.getParameter 因为它是一个多部分表单。谁能建议我如何将参数与上传文件一起传递。我提供下面的代码。请根据我的代码的兼容性建议我如何解决
if (!ServletFileUpload.isMultipartContent(request)) {
throw new CustomUploadException("Not a file upload request");
}
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext())
{
FileItemStream item = iter.next();
if (item.isFormField() == false &&
item.getFieldName().equalsIgnoreCase("xmlfile"))
{
String fileName = item.getName();
myBean.setFileName(fileName );
}
}
【问题讨论】:
标签:
java
post
multipartform-data
http-upload
【解决方案1】:
如果 FileItemStream 上的 isFormField 返回 true,则它是一个普通字段。您可以使用openStream 并将内容读入字符串。
类似这样的:
FileItemStream item = iter.next();
if(item.isFormField()) {
// Normal field
String name = item.getFieldName();
String value = Streams.asString(item.openStream());
} else {
// File
}
Streams.asString 采用第二个参数,即要使用的字符集编码,您可能需要指定一个适合您网站的参数。
【解决方案2】:
要使用 FileUpload 发送参数,只需将其添加到 setAction 方法的 URL 中
如下:
formPanel.setAction("ProjectURL>/YourServletName>?YourParameterName>="+parameter);
在您的 servlet 中只需按如下方式获取参数:
req.getParameter("YourParameterName>");
希望它有所帮助;-)
【解决方案3】:
类似的解决方案:
FileItemStream item = iter.next();
if(item.isFormField()) {
String value = item.getString();
}
或
FileItemStream item = iter.next();
if(item.isFormField()) {
InputStream name = item.getInputStream();
String value = Streams.asString(name);
}