2016-10-02 3 views
1

.xlsx 파일을 생성하고 "../web.browser/app/cheques.xlsx"에 넣습니다. 내가 이해하는 한, 빌드 내부의 공용 폴더와 동일합니다. 문제는 다운로드 할 수있게 관리 할 수 ​​없다는 것입니다.공용 폴더에서 파일을 다운로드하도록 허용 Meteor.js

workbook.xlsx.writeFile("../web.browser/app/cheques.xlsx") 
    .then(function() { 
    console.log('done'); 
    }); 

그래서 내가 일을 할 fs 또는 Picker.route을 사용한다 : 그 위치에 파일을 두는 곳

이 서버 메소드의 코드 조각은 무엇입니까?

답변

3

이렇게하는 것은 좋지 않습니다. 프로덕션 환경에서는 빌드 디렉토리를 사용할 수 없습니다. 다른 아파치 같은가에

  • 스토어에서 파일을 제공 할 수있는 파일 시스템 (하지 /공공)에 정의 된 장소에

    1. 저장 파일 :

      당신은 몇 가지 선택이있다 아마존 S3 양동이, 다음 AWS이 https://github.com/vsivsi/meteor-file-collection
    같은 패키지를 uing하는 몽고 컬렉션
  • 스토어 파일을 제공 할 수

    모든 데이터와 파일이 한 곳에서 있으므로 마지막으로 선호합니다.

  • +0

    답장을 보내 주셔서 감사합니다. 방금 서버 또는 클라이언트에 파일을 저장하지 않고 스트림을 만들었습니다. 나는 아래에 나의 해결책을 보여줄 것이지만, 당신의 대답을 올바른 것으로 표시 할 것이다. –

    2

    다음은 나를 매우 기쁘게하는 해결책입니다. 내 친구의 제안 덕분에, 나는 server-side route 내부 .xlsx 생성 코드를 삽입 :


    Excel = require('exceljs'); 
    fs = require('fs'); 
    
    Picker.route('/export/:_cheques', function(params, req, res, next) { 
        let data = Cheques.find(query).map((it) => { 
         return { 
         cheque_number: it.cheque_number, // & other data 
         } 
        }); 
    
        let workbook = new Excel.Workbook(); 
    
        let sheet = workbook.addWorksheet('Cheques', { properties: { tabColor: { argb: 'FFC0000' } } }); 
    
        sheet.columns = [ 
         { header: 'Номер чека', key: 'cheque_number', width: 30 }, // & other columns 
        ]; 
    
    
        data.map(function(it) { 
         sheet.addRow({ 
         cheque_number: it.cheque_number, // & other data 
         }) 
        }); 
    
        res.writeHead(200, { 
         'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
         'Content-Disposition': headerFilename, 
        }); 
    
        workbook.xlsx.write(res) 
    )}; 
    

    그럼 난 그냥 내 html 내부에 링크를 추가 :


    <a href='/export/all' rel='external' download> Export my file </a> 
    

    ... 및 그것은 완벽하게 작동합니다. "부끄러움처럼"당신이 말하는 것처럼 :)

    나는 이것이 누군가에게 도움이되기를 바랍니다.

    +0

    그건 훌륭한 솔루션, 좋은 결과 야! 확실히 기억할 가치가있는 – Mikkel

    +0

    감사합니다, Mike! 모두 제일 좋다. –

    +0

    이것은 웹에서만 작동합니다. 모바일 앱은 무엇인가요? –