/*jsp的上传(导入第三方upload.jar)*/ //用Apache的SmartUpload方式上传,共5部 //1.引入SmartUpload SmartUpload su = new SmartUpload(); //2.设定允许上传的文件类型,格式之间用逗号隔开 su.setAllowedFilesList("jpg,jpeg,gif"); //3.设定允许上传的文件的大小 su.setMaxFileSize(3*1024*1024); //4.初始化接收页面提交过来的请求 su.initialize(this.getServletConfig(), request, response); //5.上传 su.upload(); //注意:使用SmartUpload这种上传方式,接收页面请求不能使用HttpServletRequest //务必使用SmartUpload自带的Request,否则接收全部为空 Request myreq = su.getRequest(); String name = myreq.getParameter("myname"); String pass = myreq.getParameter("mypass"); //设定要另存为的地址 java.io.File myfile = new java.io.File(this.getServletContext().getRealPath("/images")); //如果路径不存在 if(!myfile.exists()){ //创建一个路径 myfile.mkdir(); } //获取上传文件的对象 //获取所有上传文件的对象 Files files = su.getFiles(); //获取当前上传的文件,0表示获取第一个 File file = files.getFile(0); //获取文件名 String fileName = file.getFileName(); //获取后缀名 String fileExt = file.getFileExt(); //获取文件大小 int fileSize = file.getSize(); //重新组合一个文件名使用uuid String trueName = new UUIDGenerator().generate()+"."+fileExt; //设定上传文件的最终保存路径 // /images/6598564265859453621595684585956.jpg String finalPath = "/"+myfile.getName()+"/"+trueName; //另存为 file.saveAs(finalPath); //============================================================================================================================================== /*struts1的上传与下载*/ /*struts1的上传:*/ //index.jsp中 <form action="upload.do" method = "post" enctype = "multipart/form-data"> 上传文件:<input type = "file" name = "up" /> <br/> <input type = "submit" value = "上传" /> </form> //struts-config.xml文件中 <struts-config> <data-sources /> <form-beans> <form-bean name="check" type="com.etoak.form.MyActionForm"></form-bean> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/upload" name = "check" type = "com.etoak.action.MyAction"> <forward name="suc" path="/show.jsp"></forward> </action> </action-mappings> <message-resources parameter="com.etoak.struts.ApplicationResources" /> </struts-config> //ActionForm: public class MyActionForm extends ActionForm{ //上传文件的类型为FormFile,注意setter方法对应的name值 private FormFile myfile; public FormFile getMyfile() { return myfile; } public void setUp(FormFile myfile) { this.myfile = myfile; } //软编码 @Override public void reset(ActionMapping mapping, HttpServletRequest request) { try { request.setCharacterEncoding("utf-8"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } super.reset(mapping, request); } } //Action: public class MyAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //获取上传文件 MyActionForm myform = (MyActionForm)form; //myfile就是用户上传的文件的实例 FormFile myfile = myform.getMyfile(); //获取上传文件的全名 String fileName = myfile.getFileName(); //设置文件上传后另存为的路径 File file = new File(request.getSession().getServletContext().getRealPath("images")); //如果路径不存在 if(!file.exists()){ //创建路径 file.mkdir(); } //设置一个输入流 InputStream is = myfile.getInputStream(); //设置一个输出流 OutputStream os = new FileOutputStream(file+"/"+fileName); int len; byte[] b = new byte[1024]; while((len=is.read(b))!=-1){ os.write(b,0,len); } os.flush(); os.close(); return mapping.findForward("suc"); } } //------------------------------------------ /*struts1的下载*/ /*index.jsp中*/ <form action="download.do" method = "post"> 下载文件名:<input type = "text" name = "filename" /> <br/> <input type = "submit" value = "确定" /> </form> struts-config.xml文件中 <struts-config> <form-beans> <!--这里用的动态表单--> <form-bean name="down" type="org.apache.struts.action.DynaActionForm"> <form-property name="filename" type="java.lang.String"></form-property> </form-bean> </form-beans> <action-mappings> <action path="/download" type = "com.etoak.action.MyDownAction" name = "down"></action> </action-mappings> <message-resources parameter="com.etoak.struts.ApplicationResources" /> </struts-config> Action: public class MyDownAction extends DownloadAction{ @Override protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //获取要下载的文件名 DynaActionForm myform = (DynaActionForm)form; String filename = myform.getString("filename"); //设置文件的下载路径 final String path = request.getSession().getServletContext().getRealPath("/images")+"/"+filename; //要下载文件,首先要提交给浏览器头信息 //attachment表示使用附件来下载,浏览器会给予一个提示 //online:浏览器自动打开要下载的文件 response.setHeader("content-Disposition", "attachment;filename="+ new String(filename.getBytes("utf-8"),"iso-8859-1")); return new DownloadAction.StreamInfo(){ public String getContentType() { //设置允许下载的文件类型 //这个类型是MIME数据类型,application/file表示任何数据类型都可以下载 return "application/file"; } public InputStream getInputStream() throws IOException { //设置下载的路径信息 return new FileInputStream(path); } }; } } //============================================================================================================================================== /*struts2 的上传和下载*/ /*struts2 的上传*/ //index.jsp文件中 <form action="upload.action" method = "post" enctype = "multipart/form-data"> <input type = "file" name = "myfile" /><br/> <input type = "submit" value = "上传" /> </form> <s:actionerror/> <!--添加action级别的错误信息,默认上传容量是2M,超过则接收错误信息--> //struts.xml文件中 <package name = "etoak" extends = "struts-default"> <action name = "upload" class = "com.etoak.action.UploadAction"> <result>/upload_ok.jsp</result> <!--默认上传大小为2M,超过则不执行action中的execute方法,直接返回错误信息--> <result name = "input">/index.jsp</result> </action> </package> /UploadAction: public class UploadAction extends ActionSupport { ///要有这三个属性 myfile对应页面的name值 private File myfile; private String myfileFileName; private String myfileContextType; public File getMyfile() { return myfile; } public void setMyfile(File myfile) { this.myfile = myfile; } public String getMyfileFileName() { return myfileFileName; } public void setMyfileFileName(String myfileFileName) { this.myfileFileName = myfileFileName; } public String getMyfileContextType() { return myfileContextType; } public void setMyfileContextType(String myfileContextType) { this.myfileContextType = myfileContextType; } @Override public String execute() throws Exception { /* * 从封装文件中获取一个输入流 * 在目标路径创建一个新文件,从新文件中获取一个输出流 */ //设置上传的路径 String path = ServletActionContext.getServletContext().getRealPath("/file"); //使用UUID给上传的文件重新命名 String filename = new UUIDGenerator().generate().toString()+myfileFileName.substring(myfileFileName.indexOf(".")); //创建要上传的文件的File对象 File newFile = new File(path+"/"+filename); //获取输入流 InputStream is = new FileInputStream(myfile); //获取输出流 OutputStream os = new FileOutputStream(newFile); //上传 int len = 0; byte[] b = new byte[1024]; while((len = is.read(b))!=-1){ os.write(b, 0, len); } is.close(); os.flush(); os.close(); return SUCCESS; } } //------------------------------------------ /*struts2 的下载*/ /*index.jsp文件中*/ <form action="download.action" method = "post"> 请输入要下载的文件名: <input type = "text" name = "filename" /> <input type = "submit" value = "下载" /> </form>
<package name = "etoak" extends = "struts-default"><action name = "download" class = "com.etoak.action.DownloadAction"><!-- type = "stream"表示返回给客户端的数据是一个流信息(字节数据) --><result type = "stream"><!-- 设置返回流数据的来源 inputName参数 值:指向的是当前action中的一个方法名getEtoak(),通过该方法返回流数据--><param name = "inputName">etoak</param><!-- 设置下载文件的打开方式,文件名 打开方式:online attachment${filename}: 读取当前action中的getter方法(getFilename())--><param name = "contentDisposition">attachment;filename = ${filename}</param></result></action></package>//DownloadAction:public class DownloadAction extends ActionSupport{private String filename;//返回[输入流]给客户端public InputStream getEtoak() throws Exception{String path = ServletActionContext.getServletContext().getRealPath("/file");return new FileInputStream(path+"/"+filename);}public String getFilename() {return filename;}public void setFilename(String filename) {this.filename = filename;}//可以不用重写execute方法,execute方法在下载过程中是没有任何作用的,打印一下文件名即可@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println("要下载的文件名:"+filename);return SUCCESS;}}/*struts.xml文件中*/
Apache、struts1、struts2文件上传下载的3种方式
最新推荐文章于 2020-04-03 16:05:56 发布