`
zhy584520
  • 浏览: 181073 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struts2文件下载功能实现

    博客分类:
  • j2ee
阅读更多

Struts2配置如下: 

 

<action name="download" class="sgProcessListAction"> <result name="success" type="stream"> <param name="contentType">application/octet-stream;charset=ISO8859-1</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename=${downloadFileName}</param> <param name="bufferSize">4096</param> </result> </action>


 

 

配置参数说明:

contentType

内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XMLimage/gif代表 GIF图片,image/jpeg代表JPG图片,如果文件类型未知的话就使用application/octet-stream

inputName

下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream 的属性需要编写getInputStream()方法

contentDisposition

文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:

attachment; filename=${downloadFileName},表示文件下载的时候保存的名字应为动态获取的文件名称 。如果直接写filename=${downloadFileName} ,那么默认情况是代表inline ,浏览器会尝试自动打开它,等价于这样的写法:inline; filename=${downloadFileName}

bufferSize

下载缓冲区的大小

SgProcessListAction代码如下:

public class SgProcessListAction extends ActionSupport {

	private SgProcessListService sgProcessListService;
	private SgProcessList  sgProcessList;
	private List<SgProcessList>  sgProcessLists;
	private String fileName;// 初始的通过param指定的文件名属性 
	
    public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	/** 提供转换编码后的供下载用的文件名 */   
  
    public String getDownloadFileName() {   
  
        String downFileName = fileName;   
  
        try {   
  
            downFileName = new String(downFileName.getBytes(), "ISO8859-1");   
  
        } catch (UnsupportedEncodingException e) {   
  
            e.printStackTrace();   
  
        }   
  
        return downFileName;   
  
    }   

	public SgProcessListService getSgProcessListService() {
		return sgProcessListService;
	}
	public void setSgProcessListService(SgProcessListService sgProcessListService) {
		this.sgProcessListService = sgProcessListService;
	}
	public SgProcessList getSgProcessList() {
		return sgProcessList;
	}
	public void setSgProcessList(SgProcessList sgProcessList) {
		this.sgProcessList = sgProcessList;
	}
	public List<SgProcessList> getSgProcessLists() {
		return sgProcessLists;
	}
	public void setSgProcessLists(List<SgProcessList> sgProcessLists) {
		this.sgProcessLists = sgProcessLists;
	}
	
	public String list() throws Exception {
		// TODO Auto-generated method stub 
		return super.execute();
	}
	public InputStream getInputStream() throws Exception {
		// TODO Auto-generated method stub
		HttpServletRequest request=ServletActionContext.getRequest();
		int id=Integer.valueOf(request.getParameter("id"));
		this.sgProcessList=this.sgProcessListService.findByID(id);
		String targetDirectory = request.getRealPath("/sgfiles/");
		if(sgProcessList.getPType()==0)//责任认定
		{
			targetDirectory+="\\rd\\"+sgProcessList.getPUrl();
		}
		if(sgProcessList.getPType()==1)//结案报告
		{
			targetDirectory+="\\ja\\"+sgProcessList.getPUrl();
		}
		this.fileName=sgProcessList.getPname();
		return new FileInputStream(targetDirectory);
	}
	public String add() throws Exception {
		// TODO Auto-generated method stub
		return super.execute();
	}
	public String del() throws Exception {
		// TODO Auto-generated method stub
		HttpServletRequest req=ServletActionContext.getRequest();
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setContentType("text/html; charset=UTF-8");
		Integer id=Integer.valueOf(req.getParameter("id").toString());
		this.sgProcessList=this.sgProcessListService.findByID(id);
		try
		{
		this.DeleteFile(sgProcessList.getPType(),sgProcessList.getPUrl());
		this.sgProcessListService.deleteSgProcessList(id);
		response.getWriter().println("1");
		response.getWriter().close();
		}
		catch(Exception e){
			response.getWriter().println("0");
			response.getWriter().close();
		}
		return null;
	}
	private Boolean DeleteFile(int _type,String _name)
	{
		HttpServletRequest request = ServletActionContext.getRequest();
		String targetDirectory = request.getRealPath("/sgfiles/");
		if(_type==0)
		{
			targetDirectory+="\\rd\\"+_name;
		}
		else
		{
			targetDirectory+="\\ja\\"+_name;
		}
		File f=new File(targetDirectory);
		if(f.exists())
		{
			f.delete();
			return true;
		}
		else
		{
			return false;
		}
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}
}

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics