2010-07-01 11 views
3

오늘은 생각이 들었습니다. JavaScript 애플리케이션의 메모리에있는 데이터에서 CSV를 생성 한 다음 파일 다운로드 프롬프트 (JavaScript로 작성)를 통해 해당 데이터를 사용자의 브라우저로 전송합니다.파일 JavaScript로 다운로드 하시겠습니까?

이것이 가능합니까?

+0

이 자바 스크립트 응용 프로그램의 맥락은 무엇인가 쉐일 렌드 라? 실행중인 곳, 웹 서버 또는 브라우저? – Pointy

+0

잘 모른다. 너 해봤 니? – JohnFx

+2

Redmond의 팀이 개발 한 특정 웹 브라우저에서만 가능합니다.이 팀은 "ActiveX"라는 보안 구멍이있는 독점 프레임 워크를 사용하고 있습니다.그럼에도 불구하고, 나는 그 웹 브라우저의 최신 버전에서 그렇게 할 때 경고를받을 것이라고 생각합니다. 세계가 알고있는 다른 모든 웹 브라우저에서 이것은 ** 불가능합니다. – BalusC

답변

2

서버 상호 작용없이 클라이언트 측에서 완전히 수행하려면 최소한 Flash의 도움이 필요합니다.

Downloadify으로 보내 주시면 클라이언트 측 파일 생성시 가장 잘 보입니다.

demo을 확인하십시오.

+0

훌륭합니다, 정말 고마워요. – Drew

+0

0 표로 받아 들여진 대답은 어리석은 것처럼 보입니다. – BalusC

+0

@BalusC, 고마워!, 네가 맞다면 ActionScript에 대한 JavaScript * 프록시 API 일 뿐이다. – CMS

0

서버가 주어진 MIME 유형에 대한 다운로드를 시작하도록 설정되어 있다면 간단히 location.href = 'myFile.csv'을 수행 할 수 있습니다.

이렇게하면 사용자가 원하는대로 파일을 열거 나 저장할 것인지 묻는 메시지가 표시됩니다.

이렇게하려면 서버가 이러한 방식으로 작동하도록 구성해야합니다.

1

javascript를 통해 로컬/클라이언트 쪽 콘텐츠를 다운로드하는 방법은 간단하지 않습니다. smartclient-html-jsp를 사용하여 하나의 솔루션을 구현했습니다.

  1. 내가 SmartClient를에 프로젝트 빌드에서 오전 : 여기

    는 솔루션입니다. 우리는 표의 데이터를 다운로드/내보내기해야합니다. (테이블과 같은 구조).
  2. 우리는 서버 쪽에서 데이터를 제공하기 위해 RESTish 웹 서비스를 사용하고있었습니다. 그래서 나는 두 번 URL을 치지 못했습니다; 하나는 그리드 용이고 두 번째는 내보내기/변환 할 데이터 변환입니다.
  3. 내가 한 것은 두 개의 JSP, 즉 : blank.jsp와 export.jsp입니다.
  4. blank.jsp는 문자 그대로 공백입니다. 이제 클라이언트 측에 이미 가지고있는 그리드 데이터 을 내 보내야합니다.
  5. 이제 사용자가 (링크를 클릭하여) 그리드 데이터를 내보낼 것을 요청하면 다음을 수행합니다. a. url blank.jsp 으로 새 창을여십시오. b. document.write를 사용하여 하나의 필드 이름 텍스트가 들어있는 양식을 만들고 그 안에 내보낼 데이터를 설정합니다. c. 이제 동일한 계층 구조의 export.jsp에 대한 POST가 생성됩니다. d. export.jsp의 내용 아래에 붙여 넣기는 자체 설명입니다.

// 코드 시작

<%@ page import="java.util.*,java.io.*,java.util.Enumeration"%> 
<% 
    response.setContentType ("text/csv"); 
    //set the header and also the Name by which user will be prompted to save 
    response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\""); 
    String contents = request.getParameter ("text"); 
    if (!(contents!= null && contents!="")) 
     contents = "No data"; 
    else 
     contents = contents.replaceAll ("NEW_LINE", "\n"); 

    //Open an input stream to the file and post the file contents thru the 
    //servlet output stream to the client m/c 

    InputStream in = new ByteArrayInputStream(contents.getBytes()); 
    ServletOutputStream outs = response.getOutputStream(); 

    int bit = 256; 
    int i = 0; 
    try { 
     while ((bit) >= 0) { 
      bit = in.read(); 
      outs.write(bit); 
     } 
     //System.out.println("" +bit); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(System.out); 
    } 
    outs.flush(); 
    outs.close(); 
    in.close(); 
%> 
<HTML> 
<HEAD> 

</HEAD> 

<BODY> 


</BODY> 
</HTML> 

// 코드의 끝

이 코드는 테스트 및 배포

/프로덕션 환경에서 작업이 크로스 브라우저 기능입니다.

감사

+0

Google에서 Chrome에 원시 파일 API 액세스를 일부 추가했습니다. – Drew

+0

안녕하세요, @Drew, Chrome 브라우저에만 해당되는 API입니까? 내 것은 브라우저 독립적이며 인터넷 보안을 적용하여 자동 스크립트 실행을 중지하는 IE에는 아무런 문제가 없습니다. – shaILU

관련 문제