【问题标题】:apache.commons.fileuploads not parsing the request after one time parsingapache.commons.fileuploads 一次解析后未解析请求
【发布时间】:2013-02-05 09:28:27
【问题描述】:

我正在提交带有文本和文件类型输入字段的表单,并使用此代码获取文本数据

但问题是

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
    // Process normal fields here.
    //Taking all text and doing task
    System.out.println("Field name: " + item.getFieldName());
    System.out.println("Field value: " + item.getString());
} else {
    // Process <input type="file"> here.
    //And Leaving this at this time

}            
}

如果我解析请求并逐一迭代,然后在 formField 中获取所有文本参数,之后我再次在文件类型条件中使用此代码上传文件,因此它不会再次解析

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// Process normal fields here.
//Leaving this section this time
} else {
// Process <input type="file"> here.
//Use to Upload file
System.out.println("Field name: " + item.getFieldName());
System.out.println("Field value (file name): " + item.getName());
}            
}

那么为什么会发生...以及应该如何解决这个问题...????

【问题讨论】:

  • 你的意思是,你必须for这种循环?
  • @kw4nta 实际上第一次用于获取文本数据并使用相同的代码,但在第二种情况下(其他)用于文件上传,所以在第二次它不上传文件解析没有发生......?? ?

标签: java servlets file-upload apache-commons multipartform-data


【解决方案1】:

一个 HTTP 请求只能被解析一次,因为客户端只发送了一次。在第一次解析期间,HTTP 请求已被完全消耗。在同一请求的任何后续解析尝试中,它不再可用。

如果你想解析两次,那么客户端基本上必须发送两次。但是,您不能要求/期望客户这样做,这完全没有意义。只需解析一次,然后为您的具体功能需求寻找不同的解决方案。例如。为两个循环重复使用相同的 items 列表。

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

for (FileItem item : items) {
    if (item.isFormField()) {
        // Process normal fields here.
    }
}            

for (FileItem item : items) {
    if (!item.isFormField()) {
        // Process file fields here.
    }
}            

请注意,这基本上是低效的代码。所以,我会重新考虑您的功能要求。

【讨论】:

  • 非常感谢您提供这样一个完美的理由,以及它的解决方案。我已经阅读了你的许多关于 Java EE 中的东西的文档,比如 session 等......阅读后成为你的粉丝......你的所有文件都有完整的解释,毫无疑问很容易理解......非常感谢.. .!!! - 来自印度的 SURYAKANT KACHHI
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多