多部分/表单数据的问题

2023-12-01

当我的表单包含多部分/表单数据时,我无法从 servlet 中的文件和文本输入获取值。我正在使用 apache.commons.fileuploads 来帮助上传。有什么建议。另外,在下面的代码中,有一些我认为应该更有效的事情。有没有更好的方法将这些多个文件存储在数据库中。

public void performTask(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
    {
        boolean promo = false;
        Database db = new Database();
        Homepage hp = db.getHomePageContents();

        String part = ParamUtils.getStringParameter(request, "part", "");
        if(part.equals("verbage"))
        {
            String txtcontent = (String)request.getParameter("txtcontent");
            String promoheader = (String)request.getParameter("promoheader");
            String promosubheader = (String)request.getParameter("promosubheader");
            hp.setBodyText(txtcontent);
            hp.setPromoHeader(promoheader);
            hp.setPromoSubHeader(promosubheader);
            System.err.println(txtcontent);
        }
        else
        {

            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (!isMultipart) 
            {

            }
            else {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List items = null;
                try {
                items = upload.parseRequest(request);
                //System.err.print(items);
                } catch (FileUploadException e) {
                e.printStackTrace();
                }

                Iterator itr = items.iterator();
                while (itr.hasNext()) {
                    FileItem item = (FileItem) itr.next();
                    if(item.getFieldName().equals("mainimg1"))
                    {
                        if(item.getName() !="") hp.setMainImg1(item.getName());
                    }
                    if(item.getFieldName().equals("mainimg2"))
                    {
                        if(item.getName() !="") hp.setMainImg2(item.getName());
                    }
                    if(item.getFieldName().equals("mainimg3"))
                    {
                        if(item.getName() !="") hp.setMainImg3(item.getName());
                    }
                    if(item.getFieldName().equals("promoimg1"))
                    {
                        promo = true;
                        if(item.getName() !="")
                        {
                            hp.setPromoImg1(item.getName());
                            try {
                                File savedFile = new File("/Library/resin-4.0.1/webapps/ROOT/images/promoImg1.jpg");
                                item.write(savedFile);
                                //System.err.print(items);
                            } catch (Exception e) {
                                    System.err.println(e.getMessage());
                            }
                        }
                    }
                    if(item.getFieldName().equals("promoimg2"))
                    {
                        if(item.getName() !="") 
                        {
                            hp.setPromoImg2(item.getName());
                            try {
                                File savedFile = new File("/Library/resin-4.0.1/webapps/ROOT/images/promoImg2.jpg");
                                item.write(savedFile);
                                //System.err.print(items);
                            } catch (Exception e) {
                                    System.err.println(e.getMessage());
                            }
                        }
                    }
                    if(item.getFieldName().equals("promoimg3"))
                    {
                        if(item.getName() !="")
                        {
                            hp.setPromoImg3(item.getName());
                            try {
                                File savedFile = new File("/Library/resin-4.0.1/webapps/ROOT/images/promoImg3.jpg");
                                item.write(savedFile);
                                //System.err.print(items);
                            } catch (Exception e) {
                                    System.err.println(e.getMessage());
                            }
                        }
                    }


                    System.err.println("FNAME =" + item.getFieldName() + " : " + item.getName());
                    if (item.isFormField()) {
                    } 
                    else {
                        try {
                            if(!promo)
                            {
                                String itemName = item.getName();
                                File savedFile = new File("/Library/resin-4.0.1/webapps/ROOT/images/"+itemName);
                                item.write(savedFile);
                            }
                            //System.err.print(items);
                        } catch (Exception e) {
                                System.err.println(e.getMessage());
                          }
                    }
                }
            }
        }


        db.updateHomePageContent(hp);

使用时multipart/form-data,正常的输入字段值为not可通过request.getParameter()因为 3.0 版本之前的标准 Servlet API 没有内置的工具来解析它们。这正是 Apache Commons FileUpload 存在的原因。您需要检查是否FileItem#isFormField()回报true然后从FileItem.

现在您忽略代码中的这些值。不可否认,FileItem是一个误导性的名字,如果是我,我会这样称呼它MultipartItem要不就Part代表a的一部分multipart/form-databody 包含上传的字段和普通参数。

这是一个启动示例,您应该如何解析multipart/form-data正确请求:

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

请注意,您还忽略了 MSIE 的错误行为,它会发送full文件名的客户端路径。你想把它从item.getName()根据文件上传常见问题解答:

String fileName = item.getName();
if (fileName != null) {
    filename = FilenameUtils.getName(filename);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多部分/表单数据的问题 的相关文章

随机推荐

  • “未定义的符号_memset”

    我问了类似的问题 但我有一些更新 这确实让我感到困惑 本质上 我想使用链接器链接多个目标文件 如下所示 usr ccs bin ld o q e start master dn z defs M mapfile q list of obje
  • 如何转换 NSString 中的日期时间格式?

    我从 xml 中获得了价值2009 11 23T05 24 41 000Z 现在我想显示这样的字符串 Wed Nov 4 2009 8 00 PM Wed Nov 4 2009 9 00 PM 怎么可能呢 Use NSDateFormatt
  • 嵌套对象空值检查

    我知道如何检查嵌套对象的多种方法NullPointerException 对于 Java 8 最简单的是应用Optional
  • Android 中旋转控件的图形问题

    我的第一个 旧 Android 应用程序 悬架计算器 显示了一个我找不到解决方案的问题 旋转器控件打开some旋转器在不需要的地方显示透明线 模式是这样的 从第一个微调器控件开始 所有其他微调器都遇到此问题 因此 虽然旋转器 2 4 6 没
  • 为什么Chrome要从style属性中读取svg圆半径?

    我使用 Chrome 开发工具进行开发 我刚刚用 IE11 进行了演示 嗯 是的 我的错误是没有使用 IE 检查 并且下面的语法不是有意的 在 d3 js 中设置属性时犯了错误 但我很受伤 因为我的图表没有显示 我想了解为什么我不能更早地发
  • 如何使用 Selenium Python 在 WordPress 帖子中上传文件?

    我试图使用自动化 WordPress 帖子内容创建Selenium Webdriver Python 不幸的是 我无法上传帖子内容中的文件 我已经搜索过解决方案 但大多数都使用send keys这不适用于 WP 插入介质 见下图 在插入媒体
  • 除了 MySQL 中的所有等效项

    所以我有一个名为members的表和另一个名为group的表 组的领导者也是成员 为了检索不是领导者的成员 我做了以下操作 代码 SELECT first name last name rank FROM members EXCEPT AL
  • 谷歌地图触摸底部工作表对话框

    我的底部工作表对话框的顶部有一个谷歌地图片段 我禁用了底部工作表行为上的可拖动触摸操作 以便我可以控制地图 问题是我无法使用向上或向下触摸操作滚动地图 因为我的底部工作表可拖动已禁用 我正在考虑当用户触摸地图时禁用底部工作表行为的触摸操作
  • 想要使用 PubNub 向用户的网络浏览器发送实时更新

    考虑使用 PubNub 向用户的 Web 浏览器发送实时更新 我查看了他们的网站和材料 看起来他们有几个不同的选择 我们希望使用它向用户正在查看的网页发送实时更新 该信息很简单 例如 您刚刚收到一条消息 我们并不是在尝试实现聊天程序或类似的
  • 使用 Jackson 或其替代方案将 JSON 树解析为普通类

    如何解析该 JSON foo bar baz Hello qux World 进入该类使用Jackson或其替代方案 public class Foo private String baz private String qux public
  • 使用旋转矩形的 4 个点在 PIL 中裁剪图像

    我有一个旋转矩形的四个点的列表 其形式为 points x1 y1 x2 y2 x3 y3 x4 y4 我可以使用以下方法在 PIL 中进行裁剪 img crop x1 y1 x2 y2 但这不适用于旋转的矩形 只是为了澄清 我希望旋转生成
  • XMLHttpRequest 模块未定义/未找到

    这是我的代码 var XMLHttpRequest require xmlhttprequest XMLHttpRequest var xhr new XMLHttpRequest xhr open GET URL xhr setReque
  • Python 删除字符串

    我有这 3 个字符串 黄色 小号 弹力 成人 T21fdsfdsfs黄色 小号 弹力 成人 Tdsfs黄色 小号 弹力 成人 TD 我想删除最后一个之后的所有内容 包括逗号 所以我想删除这些部分 T21fdsfdsfs Tdsfs and
  • 为什么静态和寄存器存储类不能一起使用?

    当按以下方式定义变量时 static register int a1 0 我们得到错误 error multiple storage classes in declaration specifiers 这个错误有什么根本原因吗 为什么变量不
  • PHP服务器端帖子

    我正在尝试让服务器端 POST 在 PHP 中工作 我正在尝试将交易数据发送到支付网关 但我不断收到以下错误 信息 fopen https secure ogone com ncol test orderstandard asp 无法打开流
  • JavaScript:可选回调? [复制]

    这个问题在这里已经有答案了 我编写了一个函数 它有 3 个参数 其中一个是回调函数 如何使回调成为可选参数 而不必编写另一个没有回调参数的函数 function myFunction arg1 arg2 callback do someth
  • 从数组中返回奇数或偶数

    只是需要帮助来确定我在这个代码战争挑战中做错了什么 我意识到这对某些人来说可能很容易 但请注意我只是 Javascript 的初学者 挑战 给你一个数组 长度至少为 3 但是 可能非常大 包含整数 该数组要么完全是 由奇数整数组成或完全由偶
  • 继承鉴别器的 .NET Linq to SQL 性能问题

    我遇到了具有大量继承类的 LINQ to SQL 模型的性能问题 我隔离了这个问题 它似乎是 LINQ to SQL 生成的代码本身的某种问题 我使用 Northwind 创建了一个示例程序来充实这个问题 在这两种情况下 它都会返回 Cus
  • 迭代向量时 typeid.name() 不会改变。动态转换和 typeid 基类指针

    答 总之用虚函数 因此 实际上不要将其用作良好的设计 但出于学习目的 请阅读 首先我想说我正在使用 c 和 Qt 我有一个形状指针向量 基类 编辑 doSomething 不是基类的成员 而是派生类的成员 这就是为什么我使用dynamic
  • 多部分/表单数据的问题

    当我的表单包含多部分 表单数据时 我无法从 servlet 中的文件和文本输入获取值 我正在使用 apache commons fileuploads 来帮助上传 有什么建议 另外 在下面的代码中 有一些我认为应该更有效的事情 有没有更好的