2013-03-28 2 views
7

나는 angularJS 프론트 엔드 프레임 워크와 nodejs/express를 백엔드 서버로 사용하여 JSON을 보내고받습니다. 백엔드는 프론트 엔드에 큰 JSON 객체를 보냈습니다. 프론트 엔드에서 JSON 객체를 CSV 형식으로 다운로드 할 수 있는지 궁금합니다.CSV로 Client Side Json 다운로드

데이터는 각도 컨트롤러의 $scope.data 범위 변수에 json으로 저장됩니다. 그런 다음 변수 $scope.CSVdata에서 CSV 형식의 문자열로 데이터를 변환했습니다. 클라이언트 브라우저에서 CSV 데이터를 다운로드하려면 어떻게합니까?

nodejs는 CSV 형식으로 파일을 보내도록 설정할 수 있지만 백엔드를 깨끗한 JSON API로 유지하는 것이 좋습니다.

+0

왜 당신은 그것을 얻은 후에 클라이언트 측에서 변환하지 않습니까? Node를 사용하고 있기 때문에 어쨌든 동일한 코드가되므로 API를 완전히 JSON으로 유지할 수 있습니다. 또한, 정확히 무엇을 요구하고 있습니까? JSON을 CSV로 변환하거나 데이터를 다운로드 버튼에 Angular로 가져 오거나 둘 다? –

+0

클라이언트에서 CSV 형식으로 데이터를 다운로드하는 방법을 묻습니다. CSV 형식으로 변환하는 데 덜 신경을 썼습니다. 잠시 후에 질문을 업데이트하겠습니다. – GTDev

+0

여기에 정말 좋은 해결책이 있습니다 : http://stackoverflow.com/a/13903928/1804678 – Jess

답변

8

this post 참조하는 나는이가 사용 AngularJS와 수행 할 수 있습니다 방법에 함께 빠른 데모를 던져했습니다 : 나는 서비스 참조 Base64로 코드를 포장 한

JavaScript Demo (Plunker)

을, 다음과 같은 방법으로 사용 : 코멘트에 언급 그러나이 메소드에

$scope.downloadCSV = function() { 
    var data = Base64.encode($scope.CSVData); 
    window.location.href = "data:text/csv;base64," + data; 
}; 

are some disadvantages. 이 주제에 대한 위키 피 디아 페이지에서 몇 가지 글 머리 기호를 찾아 냈습니다. 전체 목록을 보려면 저쪽으로 향하십시오.

  • 데이터 URI는 별도로 따라서 부호화 데이터 포함하는 문서를 다시 다운로드마다 다운로드들이 포함 된 문서 (예를 들어 HTML 또는 CSS 파일)에서 캐시되지 않는다.
  • Internet Explorer 8에서는 데이터 URI의 최대 길이를 32KB로 제한합니다. (Internet Explorer 9에는 이러한 제한이 없습니다.)
  • IE 8 및 9에서 데이터 URI는 이미지에만 사용할 수 있지만 탐색 또는 JavaScript에서 생성 된 파일 다운로드에는 사용할 수 없습니다. [7]
  • Base64로 인코딩 된 데이터 URI의 크기는 이진 파일 크기의 1/3입니다. (그러나 HTTP 서버가 gzip을 사용하여 응답을 압축하면이 오버 헤드는 2 ~ 3 %로 줄어 듭니다.)
  • 데이터 URI는 정상 링크 파일처럼 파일 이름을 가지고 있지 않습니다. 저장시 지정된 MIME 유형의 기본 파일 이름은 일반적으로 입니다.
  • [. . . ]
+0

이 접근법 (클라이언트 측 다운로드)을 사용하면 데이터 크기가 제한됩니까? 나는 그것이라고 생각한다. – Jess

+0

이 접근법의 단점을 참조하십시오. http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages – Jess

+0

추가 정보 주셔서 감사합니다 - 포함하도록 답변을 업데이트했습니다. –

관련 문제