在struts框架下实现文件的上传

2023-10-31

 

由于jspsmartupload上传文件,当前端页面没有file控件时,后端用jspsmartupload控件upload时将会走入一个死循环。现在采用struts自己提供的功能实现文件的上传。
1、前端页面upload.jsp
<html:form action="/filesave.do" styleId="formItem" method="post"  enctype="multipart/form-data">
<INPUT  class='input-file' type="file" name="theFile">
</html:form>
2、struts-config.xml文件配置
<form-bean name="UploadForm" type="yhp.test.web.UploadForm" />
<action input="/upload.jsp" name="UploadForm"   path="/filesave" scope="request" type="yhp.test.web.UploadAction" validate="false">
      <forward name="success" path="/success.jsp" />
      <forward name="error" path="/error.jsp" />
    </action>
3、UploadForm.java文件
package yhp.test.web;

import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionForm;

public class UploadForm extends ActionForm {
  protected String theText;   //使用protected ,其它需要上传的form可以继承此form
  protected boolean writeFile = true;
  protected FormFile theFile;
  protected String filePath;

  public String getTheText() {
    return theText;
  }
  public void setTheText(String theText) {
    this.theText = theText;
  }
  public FormFile getTheFile() {
    return theFile;
  }
  public void setTheFile(FormFile theFile) {
    this.theFile = theFile;
  }
  public void setWriteFile(boolean writeFile) {
    this.writeFile = writeFile;
  }
  public boolean getWriteFile() {
    return writeFile;
  }
  public void setFilePath(String filePath) {
    this.filePath = filePath;
  }
  public String getFilePath() {
    return filePath;
  }
  public void reset() {
    writeFile = false;
  }
}

4、UploadAction.java文件
package yhp.test.web;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;


public class UploadAction extends Action {
  public ActionForward execute(ActionMapping actionMapping,
                               ActionForm actionForm,
                               HttpServletRequest httpServletRequest,
                               HttpServletResponse httpServletResponse) throws
      Exception {
    if (actionForm instanceof UploadForm) {
      // 获取上传的目录
      String path = getServlet().getServletContext().getInitParameter("UPLOADPATH");
      File f = new File(path);
      if (!f.isDirectory()) {
        f.mkdir();
      }

      UploadForm theForm = (UploadForm) actionForm;
      String text = theForm.getTheText();
      FormFile file = theForm.getTheFile();
      String fileName = file.getFileName();
      String contentType = file.getContentType();
      boolean writeFile = theForm.getWriteFile();
      String desFileName=path fileName ;
      String size = (file.getFileSize() + " bytes");
      try {
          InputStream stream = file.getInputStream();
   OutputStream bos = new FileOutputStream(strFileName);         
          byte[] buffer = new byte[file.getFileSize()];
          stream.read(buffer);
          bos.write(buffer);
   stream.close(); 
          bos.close();
          return actionMapping.findForward("success");
      }
      catch (FileNotFoundException fnfe) {
          return actionMapping.findForward("success");
      }
      catch (IOException ioe) {
          return actionMapping.findForward("success");
      }
      catch(Exception eo){
          return actionMapping.findForward("error");
      } 
    }else{
      return actionMapping.findForward("error");
    }
  }
}

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

在struts框架下实现文件的上传 的相关文章

  • 新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串

    我正在使用 Swift 制作一个应用程序 并且正在使用 Firebase Firestore Firestore 是一个数据库 其中有一些我放入的字符串UILabel 对于我的一些字符串 我使用新行命令 或 n 所以我的一些字符串看起来像这
  • 如何将单元素元组转换为字符串?

    我有这个代码 import nltk import pypyodbc text raw input token nltk word tokenize text return a list value def search self list
  • 如何复制/设置易失性 std::string?

    我怎样才能复制一个volatile std string 易失性没有复制构造函数 也没有类似的东西c str允许易失性访问 operator 似乎也不允许设置易失性 这好像是std string根本无法用作易失性对象 这是故意的 还是我错过
  • 如何删除Python中特定字符之前的所有字符?

    我想删除指定字符或字符集之前的所有字符 例如 intro lt gt I m Tom 现在我想删除 lt gt before I m 或者更具体地说 I 有什么建议么 Use re sub 只需匹配所有字符即可I然后将匹配的字符替换为I r
  • 字符数组的文字字符串初始值设定项

    对于数组衰减为指针的情况 规则如下 出现在表达式中的 array of T 类型的左值 参见问题 2 5 衰减 有三个例外 为指向其第一个元素的指针 结果指针的类型是指向 T 的指针 例外情况是数组是 sizeof 或 运算符的操作数 或者
  • 将指数数字字符串表示形式拆分为幂和指数

    我的字符串来自指数形式的资源 如下所示 2 我想知道是否有办法将其分为 var base 2 or even 2 this is also helpful since it can be parsed and var exponent 4
  • 尝试将字符串数组中的第一个字符大写,为什么这不起作用?

    我正在尝试编写一个转换的函数 例如list style image to listStyleImage 我想出了一个功能 但它似乎不起作用 有人能指出我这里的问题吗 var myStr list style image function c
  • 使用格式模板解析字符串?

    如果我可以使用格式化字符串 string Format my 0 template 1 here 1 2 我可以反转该过程 我提供模板和填充的字符串 net 返回 arg0 arg1 等 没有优雅的方法来反转格式化的字符串 但如果你想要一个
  • 映射枚举列表

    我有一个名为 UserPermissions 的表 其中通过 userId 与用户表进行 FK 然后是一个用于枚举字符串值的字符串列 我看到的错误是 NHibernate MappingException 表 UserPermissions
  • 更改 Java 字符串中的日期格式

    I ve a String代表一个日期 String date s 2011 01 18 00 00 00 0 我想将其转换为Date并将其输出到YYYY MM DD format 2011 01 18 我怎样才能实现这个目标 好的 根据我
  • 用 ruby​​ 中的数组内容替换字符串?

    String Test string Test array link1 link2 如何替换这样的字符串 输出应该是String link1 string link2 字符串 gsub 可以返回一个枚举器 所以这很简单 string gsu
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • Tomcat 热部署到托管多个应用程序的实例

    我的问题是关于部署到托管多个应用程序并托管 Struts Spring 和 Hibernate 的应用程序上下文的 Tomcat 服务器实例 我想在不重新启动 Tomcat 服务器的情况下将更改部署到一个应用程序 举个例子 在我们公司很多时
  • 如何在 Python 中反转字符串?

    没有内置的reversePython 的函数str目的 实施此方法的最佳方式是什么 如果提供非常简洁的答案 请详细说明其效率 例如 是否str对象转换为不同的对象等 Using slicing https stackoverflow com
  • 展开字符串中的环境变量

    是否有一些 java 实用程序 可以扩展 和 env 字符串中的变量 就像 bin MY PATH gt home john bin dev null 谢谢 基本上 您想要使用环境变量进行字符串插值并扩展主目录 我不知道执行后者的简单方法
  • 字符串插值搜索

    对于那些不熟悉插值搜索的人来说 这是一种在排序数组中搜索值的方法 可能比二分搜索更快 您查看第一个和最后一个元素 并 假设数组的内容均匀分布 线性插值以预测位置 例如 我们有一个长度为 100 的数组 其中 array 0 0 和 arra
  • 查找文本文件中的唯一单词

    我正在用 Java 编写这个程序来查找文本文件中的唯一单词 我想知道这段代码是否正确 因为它甚至将空格显示为单词 String words List
  • 去除字符串的最佳方法是什么?

    我需要具有最佳性能的想法来删除 过滤字符串 I have string Input view 512 3 159 删除 view 和 的最佳性能方法是什么 和引号 我可以做这个 Input Input Replace view Replac
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea

随机推荐

  • sqli-labs————less 23(高级注入篇)

    前言 从这一关开始 我们进进入了短暂的高级注入部分 这一部分中将会陆续介绍一些更为巧妙的注入技巧 Less 23 查看一下源代码
  • VS2013及QT安装

    参考如下链接 QT下载 QT下载 VS2013及QT安装 https jingyan baidu com article e8cdb32b132cd637052bade4 html
  • egg.js + mysql + windows 踩坑全纪录

    资料 egg js文档 https www eggjs org zh CN intro quickstart 背景 前面的都很简单 按照官方文档配置即可 全部调通以后 开始接触数据库mysql 因为米有后台开发背景 所以需要从头开始 步骤
  • Error:java: 无法从静态上下文中引用非静态 变量 this

    Error java 无法从静态上下文中引用非静态 变量 this 分析 出现这种错误首先先分清什么是静态什么是非静态 它们之间的关系是什么 静态方法中不能引用非静态变量 非静态方法中能引用静态变量 错误原因代码如下 public clas
  • 关于pd.read_excel()读取xls文件报错的解决办法

    报错信息 File E Python lib site packages xlrd compdoc py line 426 in locate stream raise CompDocError s corruption seen d d
  • 电商数据部分展示

    京东链接 商品id 标题 价格部分数据展示 淘宝标题 价格 优惠价格 链接部分数据展示
  • 跳动的爱心(c++版)

    include
  • 科教兴国

    在这个时代 人工智能的奇迹交织成一片璀璨的星河 在这片星河中 各大企业如同星辰 闪烁着探索的光芒 寻找着那些志同道合的伙伴 我们并肩飞翔 穿越信息的海洋 共同描绘出未来的蓝图 每一次合作 都如同星星之间的碰撞 擦出创新的火花 为这个时代注入
  • Linux安装JDK、Redis、MySQL、RabbitMQ、Minio、Nginx.......

    文章目录 一 环境准备 二 安装JDK 三 安装MySQL 四 安装Redis 三 安装RabbitMQ 四 安装Minio 五 安装Nginx 特殊情况处理 Centos7挂载磁盘 服务器时间同步 MySQL数据库时间同步 安装解压软件
  • LeetCode题目笔记——2357. 使数组中所有元素都等于零

    文章目录 题目描述 题目链接 题目难度 简单 方法一 直接模拟 代码 Python 方法二 哈希表 代码 Python 总结 题目描述 给你一个非负整数数组 nums 在一步操作中 你必须 选出一个正整数 x x 需要小于或等于 nums
  • Android APK反编译详解(附图)

    在学Android应用开发 在想既然是用Java开发的应该很好反编译从而得到源代码吧 google了一下 确实很简单 以下是我的实践过程 在此郑重声明 贴出来的目的不是为了去破解人家的软件 完全是一种学习的态度 不过好像通过这种方式也可以去
  • 二分法查找两个有序数列的中位数

    背景 输入两个有序数列 a a1 a2 an 其中a1
  • LayUI导入excel功能

    第一种导入 div class layui form block div
  • 2个红外传感器循迹原理_智能循迹小车

    今天我们来学习制作智能循迹小车 那么什么是智能小车呢 智能小车作为现代的新发明 是以后的发展方向 它可以按照预先设定的模式在一个环境里自动的运作 不需要人为的管理 可应用于科学勘探等等的用途 智能小车能够实时显示时间 速度 里程 具有自动寻
  • Go基础:数据结构(定义和go语言实现)

    目录 前言 一 数组 Array 1 优缺点 2 适用场景和不适用场景 二 切片 Slice 1 优缺点 2 适用场景和不适用场景 三 链表 Linked List 1 优缺点 2 适用场景和不适用场景 四 栈 Stack 1 优缺点 2
  • 退役一年感悟

    不知不觉 退役已经快有一年了 前几天突发奇想登上了洛谷 就看见距离 CSP2020 只有一周了 不禁感慨时间之快 刚刚考完 CSP2019 后 思绪一直很混乱 我很难受 很不甘 感觉自己的实力并没有充分展现出来 我分明学过更难 更高深的知识
  • 技术人员的赚钱之道-9:极思极恐,技术人员需了解的“穷人”思维与“富人”思维的差别

    认识到自己的不足 是自我完善的前提 完善自己的不足 持续的改进 也算是Agile思想的体现 反复阅读 时常刷新自己的认知局限 省钱与花钱 穷人的思维是如何存钱 勤俭持家 富人的思维是如何让钱生钱 增值盈利 因此富人会尽量把钱花出去 不是消费
  • 如何通过IDEA查看注解逻辑实现

    日常写代码的过程中会使用到很多Spring框架提供的注解 也会读到别人写的自定义注解 很多时候会好奇注解背后的实现逻辑 本文就简单地记录一下 如何通过代码中的注解 使用IDEA定位到注解的逻辑实现位置 以下方法适用于官方注解 自定义注解 以
  • 27、Docker 镜像命令

    1 镜像相关命名2 镜像操作命令 0 docker help 查看帮助文档 1 docker image 查看所有镜像 2 docker pull 从服务拉去镜像 3 docker save 将镜像保存为一个压缩包 4 docker rmi
  • 在struts框架下实现文件的上传

    由于jspsmartupload上传文件 当前端页面没有file控件时 后端用jspsmartupload控件upload时将会走入一个死循环 现在采用struts自己提供的功能实现文件的上传 1 前端页面upload jsp