struts2上传

在struts2中的文件上传就已经做的非常简单了,只要按照规定的要求配置和命名,就可以做到文件上传。以下是客户端的部分代码:(注:红色字体为重要部分,需要注意)

<form__ action="${pageContext.request.contextPath}/ttt/uploadfile.action" method="post" enctype="multipart/form-data" >
   <div__ name="div1" style="height: 100; widows: 70;"><img src="#" id="img" height="100%" width="100%"/></div><br/>
   姓名:<input__ type="text" name="username"/><br/>
   密码:<input__ type="password" name="userpwd"/><br/>
   <input__ type="file" name="uplordfile" value=""  onchange="imgchange(this)"/>
   <input__ type="submit" value="上传">
   </form__>

说明:红色字体的uplordfile可以任意起,只要在对应的action中有对应的名称和符合命名规则就可以。
下面是服务器端的代码:(Action)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadFile extends ActionSupport{

       //上传的文件,name必须与页面的name属性一致
       private File uplordfile;
       //上传问件的类型必须为xxxContentType,而xxx必须和File的name一致
       private String uplordfileContentType;
       //上传文件的名称,格式必须为xxxFileName; 而xxx必须和File的name一致
       private String uplordfileFileName;
       //上传文件的保存路径
       private String savePath;
       public File getUplordfile() {
              return uplordfile;
       }
       public String getUsername() {
              return username;
       }

       public void setUsername(String username) {
              this.username = username;
       }

       public String getUserpwd() {
              return userpwd;
       }

       public void setUserpwd(String userpwd) {
              this.userpwd = userpwd;
       }
       private String username;
       private String userpwd;
       public void setUplordfile(File uplordfile) {
              this.uplordfile = uplordfile;
       }

       public String getUplordfileContentType() {
              return uplordfileContentType;
       }

       public void setUplordfileContentType(String uplordfileContentType) {
              this.uplordfileContentType = uplordfileContentType;
       }

       public String getUplordfileFileName() {
              //在这里可以给文件重命名
              String filetype=uplordfileFileName.substring(uplordfileFileName.indexOf("."));
              String datatype="yyyyMMddHHmmss";
              SimpleDateFormat sdf=new SimpleDateFormat(datatype);
              String datastr=sdf.format(new Date());
              this.setUplordfileFileName(datastr+filetype);
              return uplordfileFileName;
       }

       public void setUplordfileFileName(String uplordfileFileName) {
              this.uplordfileFileName = uplordfileFileName;
       }
     public String getSavePath() {
              //以下是若没有文件目录,则创建一个并返回
              //在struts2中,获取文件的根目录为ServletActionContext.getServletContext().getRealPath("/"),因为savePath为配置的目录,所以可以直接使用
              File file=new File(ServletActionContext.getServletContext().getRealPath(savePath));
              if(!file.exists()){
                     boolean createfile=file.mkdir();
              }
              return file.toString();
       }

       public void setSavePath(String savePath) {
              this.savePath = savePath;
       }

       //上传文件的方法
       @Override
       public String execute() throws Exception {
              System.out.println(getSavePath());
              if(this.getUsername().equals("admin")&&this.getUserpwd().equals("123")){
                     FileOutputStream fos=new FileOutputStream(getSavePath()+"/"+getUplordfileFileName());
                     FileInputStream fis=new FileInputStream(getUplordfile());
                     byte[] buff=new byte[1024];
                     int count=0;
                            while((count=fis.read(buff))>0){
                                   fos.write(buff, 0, count);
                            }
                     return SUCCESS;
              }else{
                     return ERROR;
              }
       }

}
此段代码,我已经加了注释,并且加了如何按照自己的要求重命名和若保存的路径不存在,如何让程序自动创建,这样不论工程拷贝到哪里都可以使用。
下面是配置信息:
<constant name="struts.multipart.parser" value="cos"></constant>
<!--上传文件的配置文件-->
<action name="uploadfile" class="com.defu.com.UploadFile">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/jpg,image/png,image/gif,image/pjpeg,application/zip,audio/mpeg</param>
<param name="maximumSize">100000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<param name="savePath">/uploads</param>
<result name="success">/succ.jsp</result>
<result name="input">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
说明:<constant name="struts.multipart.parser" value="cos"></constant>

常量不能少。红色加粗的fileUpload为固定写法,struts2的文件上传拦截器。红色加粗的/uploads为文件的保存路径。以后若已经编译在服务器端运行了,可以在tomcat容器的该工程下面的配置文件中直接改变路径即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值