FrostedMonkey 2020-10-21 13:36 采纳率: 0%
浏览 29

使用apache.wicket ServletFileUpload作文件上传

1、因为我使用的是wicket1.4.22这个版本的上传组件不支持一次性选多个文件。所以我发现了ServletFileUpload这个类。但是我在使用的时候,不停的出现流意外关闭的情况。

public class Chen extends WebPage {
    private MyFileUploadField fileUpload;
    private String UPLOAD_FOLDER = "C:\\a\\";
    private static Logger log = LoggerFactory.getLogger(Chen.class);
    public Chen() {

        add(new FeedbackPanel("feedback"));

        Form<?> form = new Form<Void>("form") {
            @Override
            protected void onSubmit() {
                final FileUpload uploadedFile = fileUpload.getFileUpload();
                HttpServletRequest request =
                        ((WebRequestCycle) RequestCycle.get()).getWebRequest().getHttpServletRequest();
                try {
                    DiskFileItemFactory factory = new DiskFileItemFactory();
                    factory.setSizeThreshold(1024 * 1024);
                    factory.setRepository(new File(UPLOAD_FOLDER));
                    // 2、创建文件上传的核心类
                    ServletFileUpload upload = new ServletFileUpload(factory);
                    // 设置上传文件的名称的编码
                    upload.setHeaderEncoding("UTF-8");

                    // ServletFileUpload的API
                    boolean multipartContent = upload.isMultipartContent(request);
                    log.info("111111111111111111111111111111");
                    log.info("111111111111111111111111111111");
                    log.info("aaa:"+request);
                    log.info("bbbb:"+upload);
                    // 根据 enctype="multipart/form-data" 判断表单是否是文件上传的表单
                    if (multipartContent) {
                        log.info("ccccc");
                        // 是文件上传的表单
                        // ***解析request获得文件项集合
                        List<FileItem> parseRequest = upload.parseRequest(request);
                        if (parseRequest != null) {
                            for (FileItem item : parseRequest) {
                                // 判断是不是一个普通表单项
                                boolean formField = item.isFormField();
                                if (formField) {
                                    // username=zhangsan
                                    String fieldName = item.getFieldName();
                                    String fieldValue = item.getString("UTF-8");// 对普通表单项的内容进行编码

                                    System.out.println(fieldName + "----" + fieldValue);
                                } else {
                                    // 文件上传项
                                    // 文件的名
                                    String fileName = item.getName();
                                    // 获得上传文件的内容
                                    InputStream in = item.getInputStream();
                                    OutputStream out = new FileOutputStream(UPLOAD_FOLDER + "/" + fileName);
                                    //代替经典的文件拷贝
                                    IOUtils.copy(in, out);
                                    in.close();
                                    out.close();

                                    // 删除临时文件
                                    item.delete();

                                }
                            }
                        }

                    } else {
                        log.info("dddddddd");

                    }
                } catch (Exception e) {
                    log.error(e.toString());
                    log.error("error");
                }
            }

        };

        form.setMultiPart(true);


        form.add(fileUpload = new MyFileUploadField("fileUpload"));

        add(form);

    }

}

List parseRequest = upload.parseRequest(request);
我获取到的是一个空。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/2002/08/xhtml/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml
                          http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd">
<head>
    <style>
        .feedbackPanelINFO {
            color: green;
        }
        .feedbackPanelERROR {
            color: red;
        }
    </style>
</head>
<body>
<h1>upload dicom file</h1>

<div wicket:id="feedback"></div>
<form wicket:id="form" method="post" enctype="multipart/form-data">
    <input type="text" name="username"><br>
    <input type="file" name="filename"><br>
    <input type="submit" value="上传文件">
</form>

</body>
</html>
  • 写回答

1条回答 默认 最新

  • Java毕设王 2023-06-06 14:42
    关注

    如果在使用Apache Wicket和ServletFileUpload进行文件上传时,遇到意外关闭的情况,可能是因为上传的文件过大或上传时间过长导致的。可以尝试以下方法解决:

    1. 增加上传文件大小限制。在web.xml文件中添加以下配置,可以增加上传文件大小限制:

      <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>org.apache.commons.fileupload.servlet.ServletFileUpload</servlet-class>
        <init-param>
          <param-name>fileSizeMax</param-name>
          <param-value>10485760</param-value>
        </init-param>
      </servlet>
      

      上述配置将上传文件大小限制为10MB。

    2. 增加上传时间限制。在web.xml文件中添加以下配置,可以增加上传时间限制:

      <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>org.apache.commons.fileupload.servlet.ServletFileUpload</servlet-class>
        <init-param>
          <param-name>idleTimeout</param-name>
          <param-value>300000</param-value>
        </init-param>
      </servlet>
      

      上述配置将上传时间限制为5分钟。

    3. 检查服务器配置。如果上传文件过大,可能是服务器的内存或磁盘空间不足导致的。您可以检查服务器的配置,确保有足够的内存和磁盘空间来处理上传的文件。

    希望以上方法能够帮助您解决意外关闭的问题。

    评论

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件