2012-09-06 3 views
0

파일을 응답의 첨부 파일로 스트리밍하려고합니다. 나는이 기능을 가지고 :response.stream 및 web2py_component : 파일을 첨부 파일로 스트리밍 할 수 없습니다.

def form_query(): 
    response.flash = str(request.args(0)) 
    response.generic_patterns = ['load'] 
    response.headers['Content-Type'] = gluon.contenttype.contenttype('.txt') 
    response.headers['Content-Disposition'] = 'attachment; filename=somefile.txt' 
    #more code goes in here to process request.args here. 
    #Ultimately, the controller is expected to return a dict containing a table and the file to be streamed as an attachment. For now just trying to get the file streamed. 
    return response.stream(open('somefile.txt'),chunk_size=1024) 

나는 (내가 지수 (내부 스트리밍 코드를 삽입하는 경우)와 예에 대한 index.html을로 이동합니다) 일반적으로이 컨트롤러를 호출은 파일을 저장 다운로드 팝업을 열어 응답 할 때 디스크에. 다운로드 팝업보다는

web2py_component("{{=URL('reports', 'form_query.load')}}" + "/" + jQuery(this).val(), target='div_form_query'); 

는 그것은 DIV 'div_form_query'내부의 파일을 렌더링 : I이 된 index.html에서 web2py_component에서 대상 함수로 호출 한 때이 같은 (응답과 사업부를 채우기 위해) 창문.

web2py_component를 사용하는 동안 파일을 첨부 파일로 렌더링하는 방법에 대한 아이디어. 조건부로 입력 양식을 div 옵션 (div_form_query)에로드하려면 원하는 테이블을 가진 선택 목록을 기반으로 web2py_component를 사용하고 있습니다. 만 위의 web2py_component()를 호출하는 것입니다

jQuery('#rep_type').change(function(){ 
    var choice = jQuery(this).val(); 
    web2py_component('{{=URL('reports', 'create_table')}}' + '/' + choice, 
    target='div_form_query'); 
    window.open('{{=URL('reports', 'form_query')}}' + '/' + choice); 
}); 

또 다른 옵션을, 그리고 : 어쩌면이 당신이 원하는 것을 할 것입니다

{{extend 'layout.html'}} 

{{=SELECT('Select a report', 
*[OPTION(repts[i].descr, _value=str(repts[i].report)) for i in range(len(repts))], _id="rep_type")}} 

<div id="div_form_query"></div> 

<script> 
    jQuery(document).ready(function(){ 
    jQuery('#rep_type').change(function(){ 
    web2py_component("{{=URL('reports', 'form_query.load')}}" + "/" + jQuery(this).val(), target='div_form_query'); 
    }); 

    }); 
</script> 
{{end}} 

감사합니다, MAVE

+0

파일을 첨부 파일로 다운로드하려면 구성 요소 div의 요점은 무엇입니까? div는 페이지에 무언가를 표시하고자 함을 의미합니다. – Anthony

+1

Anthony, 맞습니다. DIV는 컨트롤러가 응답을 표시하도록 컨트롤러에 추가로 응답을 표시해야합니다. 죄송합니다. 위와 같지 않은 경우 제어기 (form_query)가 다음 두 가지 작업을 수행하기를 원합니다. 목표 DIV에 들어가고 파일 다운로드를 트리거하는 테이블. form_query()에 대한 위의 코드는 테이블을 포함하는 dict을 반환하는 코드를 표시하지 않습니다. – maverick

+0

두 가지 별도의 호출을 만들어야합니다. 하나는 테이블 용이고 다른 하나는 파일 용입니다 (두 개의 개별 함수가 될 수 있습니다). 업데이트 된 답변보기 – Anthony

답변

1

다음 index.html을이 같이 보입니다 구성 요소 HTML에 다음을 수행하는 스크립트를 포함하십시오.

window.open('{{=URL('reports', 'form_query')}}' + '/' + choice); 
관련 문제