zoukankan      html  css  js  c++  java
  • struts2文件上传(多文件)文件下载

    一 文件上传

    1.环境要求

    commons-fileupload-xxx.jar
    commons-io-xxx.jar

    2.准备jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <s:form action="Fileupload" method="" enctype="multipart/form-data">
    <s:textfield name="title" label="用户名"/><br>
    <s:file name="upload" label="上传文件"/><br>
    <s:submit name="submit" value="上传" />
    </s:form>
    </body>
    </html>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <s:form action="FileuploadMore" method="post" enctype="multipart/form-data">
    <s:textfield name="title" label="用户名"/><br>
    <s:file name="upload" label="上传文件"/><br>
    <s:file name="upload" label="上传文件"/><br>
    <s:file name="upload" label="上传文件"/><br>
    <s:file name="upload" label="上传文件"/><br>
    <s:submit name="submit" value="上传" />
    </s:form>
    </body>
    </html>


    3.Action页面

    package com.icss.action.upload;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
    ***************************
    *@类名  UploadAction.java
    
    public class UploadAction extends ActionSupport{
    	
    	//1.普通字段name属性名
    	private String title;  
    	private File upload;//file 控件名           它要和表单name属性和action属性名要一致
    	//2.控件名+ContentType
    	private String uploadContentType;//上传文件的类型
    	//3.控件名+FileName
    	private String uploadFileName;//上传文件的名称
    	//4.上传文件的路径 upload
    	private String savePath; //获取完整的路径
    	
    	//上传
    	public String execute() throws Exception {
    		byte[] buffer = new byte[2048];//缓冲区
    		//输入流
    		FileInputStream fis = new FileInputStream(upload);
    		//输出流     
    		FileOutputStream fos = new FileOutputStream(getSavePath()+"\"+uploadFileName);
    		int len=fis.read(buffer);
    		while(len>0){
    			fos.write(buffer, 0, len);
    			len=fis.read(buffer);
    		}
    		fos.flush();
    		fos.close();
    		fis.close();
    		return "success";
    
    	}
    	
    	
    	
    	
    	
    	
    	
    	//生成get和set方法
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    	public File getUpload() {
    		return upload;
    	}
    	public void setUpload(File upload) {
    		this.upload = upload;
    	}
    	public String getUploadContentType() {
    		return uploadContentType;
    	}
    	public void setUploadContentType(String uploadContentType) {
    		this.uploadContentType = uploadContentType;
    	}
    	public String getUploadFileName() {
    		return uploadFileName;
    	}
    	public void setUploadFileName(String uploadFileName) {
    		this.uploadFileName = uploadFileName;
    	}
    	public String getSavePath() {
    		return ServletActionContext.getServletContext().getRealPath(savePath);
    	}
    	public void setSavePath(String savePath) {
    		this.savePath = savePath;
    	}
    	
    	
    	
    	
    	
    	
    	
    }
    
    public class UploadMoreAction extends ActionSupport{
    	//file 控件  name 属性和action属性名要一致
    	//1.普通字段name属性名
    	private String title;  
    	private File[] upload;
    	//2.控件名+ContentType
    	private String[] uploadContentType;//上传文件的类型
    	//3.控件名+FileName
    	private String[] uploadFileName;//上传文件的名称
    	//4.上传文件的路径 upload
    	private String savePath; //获取完整的路径
    	
    	//上传
    	public String execute() throws Exception {
    		byte[] buffer = new byte[2048];//缓冲区
    		for(int i=0;i<upload.length;i++){
    			//输入流
    			FileInputStream fis = new FileInputStream(upload[i]);
    			//输出流     
    			FileOutputStream fos = new FileOutputStream(getSavePath()+"\"+uploadFileName[i]);
    			int len=fis.read(buffer);
    			while(len>0){
    				fos.write(buffer, 0, len);
    				len=fis.read(buffer);
    			}
    			fos.flush();
    			fos.close();
    			fis.close();
    			
    		}
    		return "success";
    	}
    	
    	
    	
    	
    	
    	
    	
    	
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	public String getSavePath() {
    		return ServletActionContext.getServletContext().getRealPath(savePath);
    	}
    	public void setSavePath(String savePath) {
    		this.savePath = savePath;
    	}
    
    
    
    
    
    
    
    
    	public File[] getUpload() {
    		return upload;
    	}
    
    
    
    
    
    
    
    
    	public void setUpload(File[] upload) {
    		this.upload = upload;
    	}
    
    
    
    
    
    
    
    
    	public String[] getUploadContentType() {
    		return uploadContentType;
    	}
    
    
    
    
    
    
    
    
    	public void setUploadContentType(String[] uploadContentType) {
    		this.uploadContentType = uploadContentType;
    	}
    
    
    
    
    
    
    
    
    	public String[] getUploadFileName() {
    		return uploadFileName;
    	}
    
    
    
    
    
    
    
    
    	public void setUploadFileName(String[] uploadFileName) {
    		this.uploadFileName = uploadFileName;
    	}
    	


    
    

    4.配置struts.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    	<constant name="struts.devMode" value="false"/>
      	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
      	<constant name="struts.configuration.xml.reload" value="true"/>
    	<package name="upload" namespace="/" extends="struts-default">
    	<!-- 单文件上传 -->
    	<action name="Fileupload" class="com.icss.action.upload.UploadAction">
    		<param name="savePath">/upload</param>
    		<result name="success">/upload_success.jsp</result>
    	</action>
    	<!-- 多文件上传配置 -->
    	<action name="FileuploadMore" class="com.icss.action.upload.UploadMoreAction">
    		<param name="savePath">/upload</param>
    		<result name="success">/upload_success.jsp</result>
    	</action>
    	<!-- 下载文件 -->
    	<action name="download" class="com.icss.action.upload.downloadAction">
    			<param name="inputPath">/upload</param>
    			<result name="success" type="stream">
    				<param name="contentType">application/octet-stream</param>
    				<param name="inputname">inputStream</param>
    				<param name="contentDisposition">
    					attachment;filename="${fileName}"
    				</param>
    				<param name="bufferSize">4096</param>
    			</result>
    		</action>
    
    	</package>
    </struts>
    File类型的xxx属性,与表单中的File控件的name属性一致,用于封装File控件对应的文件内容
    String类型的xxxFileName属性,该属性名称就是前面的File类型属性+FileName组合而成,是固定的语法,作用就是封装File控件对应文件的文件名
    String类型的xxxContentType属性,同样也是xxx属性+ContentType组合而成,固定语法,作用就是封装File控件对应文件的文件类型

    在Action中设置了这三个属性,在执行上传时就可以直接通过getXxx()方法来获取到上传文件的文件名、类型及文件内容。
    而实现文件上传的过程就是使用流实现文件读取的过程,

    二 文件下载

    jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <a href="download?fileName=head.jpg">下载此图片</a>
    </body>
    </html>
    2.Action
    public class downloadAction extends ActionSupport {
    	//下载路劲
    	private String inputPath;
    	//下载文件名
    	private String fileName;
    	//读取下载文件的流
    	private InputStream inputname;
    	//获取输入流
    	public InputStream getInputName() throws FileNotFoundException {
    		String path = ServletActionContext.getServletContext().getRealPath(inputPath);
    		return new BufferedInputStream(new FileInputStream(path+"\"+fileName));
    	}
    
    	public String getInputPath() {
    		return inputPath;
    	}
    
    	public void setInputPath(String inputPath) {
    		this.inputPath = inputPath;
    	}
    
    	public String getFileName() {
    		return fileName;
    	}
    
    
    	public void setFilename(String fileName) {
    		this.fileName = fileName;
    	}
    
    	public void setInputName(InputStream inputName) {
    		this.inputname = inputName;
    	}
    
    	public String execute() throws Exception {
    		
    		return SUCCESS;
    	}
    }
    struts.xml在上面。

      
      


  • 相关阅读:
    切换node版本
    vue 移动端组件
    vue 单元测试
    git
    每日日报
    每日日报
    每日日报
    01人月神话阅读笔记之三
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767554.html
Copyright © 2011-2022 走看看