Struts2 스트림 형식을 통해 Excel 다운로드 파일 생성

작업 중에 JSP 페이지에서 POI로 생성된 Excel 파일을 직접 다운로드해야 합니다. 개발 플랫폼은 Struts2+Spring2를 기반으로 합니다. 인터넷에서 찾아봤는데 예가 적지 않고 저에게 일정한 도움을 주었지만 디버깅을 하지 않고 바로 사용할 수 있는 코드 예는 거의 없습니다.그래서 저는 자신의 마지막 실현 코드를 붙여서 훗날에 도움이 됐으면 좋겠습니다. 아마도 실현 방법이 가장 좋은 것은 아니지만 너무 많은 디버깅을 하지 않아도 바로 사용할 수 있을 것입니다.
@Result의 params 매개 변수 설정 부분에 주목한 코드

public class EfficDataAction extends ActionSupport {

        //... 
	private InputStream inputStream;
	private String contentDisposition;
	private String documentFormat = "xls";
	private String contentType;

	public String getContentType() {
		return documentFormat == "xlsx" ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
				: "application/vnd.ms-excel;charset=ISO8859-1";
	}

	@Resource
	private EfficDataService efficdataservice;

	public String getContentDisposition() {
		return contentDisposition;
	}

	public InputStream getInputStream() {
		return inputStream;
	}

	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	public void setContentDisposition(String contentDisposition) {
		this.contentDisposition = contentDisposition;
	}

	public String getDocumentFormat() {
		return documentFormat;
	}

	public void setDocumentFormat(String documentFormat) {
		this.documentFormat = documentFormat;
	}

	public EfficDataService getEfficdataservice() {
		return efficdataservice;
	}

	@Resource
	public void setEfficdataservice(EfficDataService efficdataservice) {
		this.efficdataservice = efficdataservice;
	}

        //... 

    // params 
    @Action(value = "/createefficfile", results = { @Result(name = "success", type = "stream") }, params = {
			"contentType", "${contentType}", "inputName", "${inputStream}",
			"contentDisposition", "${contentDisposition}", "bufferSize", "2048" })
	public String createefficfile() throws Exception {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		//... 3 Excel , 
                HSSFWorkbook book = new HSSFWorkbook();
		book = efficdataservice.createEfficCollectFile(this);
		book.write(baos);

		//... Excel 
                //... , 
                this.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
		this.setContentDisposition("filename=\\"
				+ java.net.URLEncoder.encode(getUploadFileFileName(), "UTF-8")
				+ getDocumentFormat());

		return "success";
	}

}


Struts2의 Action을 주석으로 설정했습니다. xml 프로필로도 문제가 없을 것입니다.
전재 출처를 밝혀 주십시오...

좋은 웹페이지 즐겨찾기