2012-12-15 4 views
5

요청한 파일의 원시 데이터를 가져올 수 있지만 브라우저에서 파일을 사용자에게 제공 할 수 없습니다. iframe을 사용해야합니까?angularjs와 express.js 사이에서 작동하도록 다운로드 받기

//Client code 
    download_file: function (path, callback) { 
     $http.post('/download/client_file', {path:path}). 
      success(function(data, status, headers, config) { 
       console.log(data); //this contains the raw data of the res.download 
            //from the server. 
      }); 
    } 

    //server code 
    res.download(file); // the path is proper 
+0

HTTP GET을하면 더 잘 작동합니까? 사용자가 파일에 대한 링크를 클릭하면 일어날 일을 에뮬레이트합니다. –

+0

GET 또는 POST를 사용했는지는 중요하지 않았습니다. 적절한 양식 데이터 객체를 가지고 있지 않았습니다. –

답변

2

아래 코드를 서비스 파일에서 다운로드하여 항목을 다운로드 한 결과 훌륭한 결과를 얻었습니다. 나는 파일 형식에 따라 http://filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/

$('<form action="'+ url +'" method="'+ ('post') +'">'+inputs+'</form>') 
       .appendTo('body').submit().remove(); 
+1

내가 할 수 있다면 나는 +2이 것이다. 굉장한 솔루션. 이 대답에서 명확히 알 수있는 한 가지는 입력이 다음과 같이 보일 수 있다는 것입니다 :''mydata'는 '$ 범위 '. 내 블로그 전체 예제보기 : http://jessemon.blogspot.com/2013/11/download-data-from-angular-nggrid-as-csv.html – Jess

+0

동일한 문제가 발생합니다. 컨트롤러가 있습니다. 내 기본 app.js에 $ http.put()을하고있다. 내가받는 데이터 응답도 .csv 파일의 원시 출력이며 위의 값으로 대체하면 '참조 오류 : $ 정의되지 않음'이 표시되지 않습니다. 누락 된 내용이 있습니까? – MonsterWimp757

+1

@ MonsterWimp757 index.html에서 jquery를로드하기 전에 $ check를 사용하려면 – Eric

0

에서 그것을 가지고, 그리고 헤더가 그것을 설정하는 방법, 당신은 훨씬 쉽게 단순히 JS에서 location.href="uriString"; 전화를 찾을 수 있습니다. 이미 가지고있는 창을 사용하여 파일을 즉시 다운로드해야합니다. JSON 또는 텍스트 데이터 인 경우 머리글을 조정하여 인라인으로 렌더링하는 대신 머리글을 다운로드해야합니다 ("content-disposition : attachment", 아마도. ..)