1

.xlsxファイルを生成してから、 "../web.browser/app/cheques.xlsx". 私が理解しているように、これはビルド内の public フォルダーに相当します。問題は、ダウンロードできるようにすることができないことです。

これは、ファイルをその場所に配置するサーバー メソッドのコードの一部です。

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

それで、私は仕事をするために、fsまたは使うべきですか?Picker.route

4

2 に答える 2

3

これを行うことはお勧めできません。本番環境では、ビルド ディレクトリは利用できません。

いくつかの選択肢があります:

  1. Apache のような他の何かが提供できるファイル システム (/public ではない) の定義された場所にファイルを保存します。
  2. ファイルを Amazon S3 バケットに保存し、AWS にそれらを提供させます
  3. このhttps://github.com/vsivsi/meteor-file-collectionのようなパッケージを使用して、ファイルをMongoコレクションに保存し ます

すべてのデータとファイルが 1 か所にあるので、私は後者を好みます。

于 2016-10-02T11:05:48.917 に答える
2

これが私をとても幸せにした解決策です。友人の提案のおかげで、.xlsx生成コードをserver-side route:内に配置しました。


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>

...そしてそれは完璧に機能します。皆さんがよく言うように、「お守りのように」: )

これが誰かに役立つことを願っています。

于 2016-10-02T18:59:50.210 に答える