java struts文件上传和下载详解-mile米乐体育

struts2文件上传

struts 2框架提供了内置支持处理文件上传使用基于html表单的文件上传。上传一个文件时,它通常会被存储在一个临时目录中,他们应该由action类进行处理或移动到一个永久的目录,以确保数据不丢失。

请注意,服务器有一个安全策略可能会禁止写到目录以外的临时目录和属于web应用的目录。

在struts中的文件上传是通过预先定义的拦截文件上传拦截器这是可通过org.apache.struts2.interceptor.fileuploadinterceptor类的defaultstack中的一部分。仍然可以使用在struts.xml中设置各种参数,我们将在下面看到。

视图文件index.jsp

<%@ page language="java" import="java.util.*" pageencoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <% string path = request.getcontextpath(); string basepath = request.getscheme() "://" request.getservername() ":" request.getserverport() path "/"; %>                 my jsp 'index.jsp' starting page                                             

在上面的例子中值得注意几点说明。首先,表单的enctype属性设置为multipart/ form-data。这应该是设置为使得处理文件上传文件上传。下一个点值得注意的是表单的 action方法上传和文件上传字段的名称 – myfile。我们需要这些信息创建操作方法和struts配置。

接下来让我们创建一个简单的 jsp 文件的success.jsp 结果显示我们的文件上传的情况下成功。

<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%>    文件上传   成功  

创建action类: 处理上传文件

package com.oumyye.fileupload;  import java.io.file; import java.io.ioexception; import org.apache.commons.io.fileutils; import com.opensymphony.xwork2.actionsupport;  public class fileuploadaction extends actionsupport{         private file myfile;        private string myfilecontenttype;        private string myfilefilename;        private string destpath;     /**      *       */     private static final long serialversionuid = 1l;     @override     public string execute() throws exception {         // todo auto-generated method stub          destpath = "e:/upload/";            try{               system.out.println("src file name: "   myfile);                 system.out.println("我的文件名" myfilefilename);               system.out.println("我的文件类型"  myfilecontenttype);               file destfile  = new file(destpath, myfilefilename);              fileutils.copyfile(myfile, destfile);           }catch(ioexception e){              e.printstacktrace();              return error;           }         return success;     }     public file getmyfile() {         return myfile;     }     public void setmyfile(file myfile) {         this.myfile = myfile;     }     public string getmyfilecontenttype() {         return myfilecontenttype;     }     public void setmyfilecontenttype(string myfilecontenttype) {         this.myfilecontenttype = myfilecontenttype;     }     public string getmyfilefilename() {         return myfilefilename;     }     public void setmyfilefilename(string myfilefilename) {         this.myfilefilename = myfilefilename;     }     public string getdestpath() {         return destpath;     }     public void setdestpath(string destpath) {         this.destpath = destpath;     }     public static long getserialversionuid() {         return serialversionuid;     } }

配置文件:

可以使用恒定的标签在应用程序 struts.xml文件,像我一样改变要上传的文件的最大大小。让我们有我们的在struts.xml如下:

                                                                            /success.jsp             /index.jsp                                                     text/plain                  attachment;filename="${filename}"                  downloadfile                  1024                                

以下是web.xml文件中的内容,与struts2的基本配置一样

    struts2_1000_fileupload        struts2     org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter           struts2     *.action    

上述代码即可完成文件上传

文件下载

视图文件filedownload.jsp

<%@ page language="java" import="java.util.*" pageencoding="utf-8"%> <% string path = request.getcontextpath(); string basepath = request.getscheme() "://" request.getservername() ":" request.getserverport() path "/"; %>               文件下载                                             

文件下载内容:


dream.jpg:

创建action类: 处理上传文件,

package com.oumyye.action; import java.io.inputstream; import org.apache.struts2.servletactioncontext; import com.opensymphony.xwork2.actionsupport;  //文件下载 public class filedownload extends actionsupport{     private string filename;     public string getfilename() {         return filename;     }      public void setfilename(string filename) {         this.filename = filename;     }     //返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流     public inputstream getdownloadfile() throws exception     {             this.filename = "hello.jpg" ;            //获取资源路径            return servletactioncontext.getservletcontext().getresourceasstream("upload/" this.filename) ;         }     @override     public string execute() throws exception {            return success;     }  }

配置文件同上

下载时可能会出现错误

can not find a java.io.inputstream with the name [downloadfile] in the invocation stack. check the  tag specified for this action.

可能的原因:

1.文件路径不对,根本就没有取到文件。这种情况下,可以将获得inputstream的那条语句放在system.out.println()中输出一下,若为null,那就是路径不对了,或者说得准确些就根本没有找到文件。

2.在action中没有写配置文件中””后面属性的那个get方法.

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图