Struts2上传与下载文件 简单例子

之前转载过一篇上传与下载的文章 ,参考一下自己整理验证了一下

package com.jereh.edu.entity;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;


import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;


public class UpLoadAction {
  private String uname ; //前台提交的用户名 ;
  private  File file;  //上传文件
  private  String fileFileName; //上传文件 的文件名 前台自动提交不用另写 input
  private  String fileContentType ;/上传文件 的文件类型 前台自动提交不用另写 input
  private  InputStream inputStream ;//上传是用到的输入流 可以定义局部变量
  private  String fileName ;//前台隐藏上传的下载的文件名
  private  String  downLoadPath; //下载路径
 
public String getFileName()  {

	return fileName;
}
public void setFileName(String fileName) throws UnsupportedEncodingException{
	byte[] b= fileName.getBytes("utf-8");
	String str =new String(b,"iso-8859-1");
	//获取时重新解码编码 ,解决乱码 和不显示中文的问题
    this.fileName = str;
}
public String getDownLoadPath() {
	return downLoadPath;
}
public void setDownLoadPath(String downLoadPath) {
	this.downLoadPath = downLoadPath;
}

public InputStream getInputStream() {
	return inputStream;
}
public void setInputStream(InputStream inputStream) {
	this.inputStream = inputStream;
}
public String getUname() {
	return uname;
}
public void setUname(String uname) {
	this.uname = uname;
}
public File getFile() {
	return file;
}
public void setFile(File file) {
	this.file = file;
}

public String getFileFileName() {
	return fileFileName;
}
public void setFileFileName(String fileContentName) {
	this.fileFileName = fileContentName;
}

  public String getFileContentType() {
	return fileContentType;
}
public void setFileContentType(String fileContentType) {
	this.fileContentType = fileContentType;
}
public String upFile() throws IOException{
	  //文件上传路径 ;
	  String path = ServletActionContext.getServletContext().getRealPath("/upload/");
	//  File upFile =new File(path+File.separatorChar+file.getName());
	  File upFile =new File(path+File.separatorChar+fileFileName);
	  upFile.getParentFile().mkdir();
	  //创建path路径 
	  System.out.println("文件名+++++"+file.getName()+"---"+file.getPath());
	  //上传的file是个临时文件Struts2保存起来 我们把它导入到我们想要的路径下
	  System.out.println("上传的文件名+++++"+fileFileName+"---"+fileContentType);
	  
	  inputStream  =new FileInputStream(file) ;
	  //从临时文件里读取
	  OutputStream ops =new FileOutputStream(upFile);
	  //输出到指定文件
	  byte[] b =new byte[1024] ;
	  
	  while((inputStream.read(b,0,b.length))!=-1){
		  ops.write(b);
	  }
 	  ops.close();
	  inputStream.close();
	  return Action.SUCCESS;
  }
public InputStream getDownLoad() {
	return ServletActionContext.getServletContext().getResourceAsStream(downLoadPath);
}
public String downLoadFile(){
	return Action.SUCCESS ;
}

}
有配置过Struts的一看就会明白

<package name="upload"  namespace="/upload" extends="struts-default" >
            <action name="upFile" method="upFile" class="com.jereh.edu.entity.UpLoadAction">
                <result name="success">
                 /success.jsp
                </result>
            </action>
            <action name="downLoadFile" method="downLoadFile"
            class="com.jereh.edu.entity.UpLoadAction">
            <result name="success" type="stream">

            <param name="contentDisposition">attachment;filename=${fileName}</param>
            <param name="inputName">downLoad</param>
            </result>
            </action>
            </package>
 

 <param name="contentDisposition">attachment;filename=${fileName}</param>
contentDisposition 配置了前台是弹出下载框的形式下载 否则 直接显示在页面上 filename 是下载框提示的下载文件的名字

前台jsp form 表单

<pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>upFile</title>
    
	

  </head>
  
  <body>
  <form action="upload/upFile.action" method ="post" enctype="multipart/form-data">
         <p> 
         用户名: 
         </p>
   <p><input type="text" name="uname"></p>
   		<p>
   	文件:	
   		</p>
   		<p>
   		<input type="file" name="file">
   		</p>
   		<p>
   		<input type="submit" value="提交">
   		</p>
   </form>
   <br/>
   <h3>下载</h3>
   <form action="upload/downLoadFile.action" method="post">
   <input type="hidden" name="downLoadPath" value="/upload/新建文本文档.txt">
     <input type="hidden" name="fileName" value="新建文本文档.txt">
   <input type="submit" value="下载">
   
   </form>
  </body>
</html>



上传的表单的

<pre name="code" class="html">enctype="multipart/form-data"


属性必须添加 而且method="post" 方式提交 为了数据的完整性

jsp中隐藏了文件路径和文件名  做的项目了可以改成js代码 就不多说了 

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。