2016-10-13 11 views
4

私は要望に応じてfly on excelファイルを作成し、clojure.ringを使用してユーザーに応答する必要があります。ring.utils.ioのpiped-input-streamを使用してファイルを提供する

私は(この機能参照:https://github.com/mjul/docjure/blob/master/src/dk/ative/docjure/spreadsheet.clj#L86)をExcelファイルを作成し、出力ストリーム にそれを書くためにdocjureを使用して、私は(https://github.com/ring-clojure/ring/blob/1.5.0/ring-core/src/ring/util/io.clj#L11を参照)​​を使用してからの出力ストリームを取得します。

コードの関連部分:

(defn excel-response 
    [params] 
    (-> (response (piped-input-stream (fn [out-stream] 
            (create-excel-into-stream out-stream 
                  params)))) 
     (assoc :headers {"Content-Type" 
         "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}))) 

この機能を使用するには、私は常にいくつかの理由のために空の.xlsxファイルを取得します。 ​​が閉じる前に、私は自分の応答の本体として提供することができます。

出力ストリームに書き込み、入力ストリームに渡して応答の本体として機能するように、正しく使用するにはどうすればよいですか?

+0

見るべき3つのアイデア: 'create-excel-into-stream'はコンテンツを作成しますか?ストリームは互いに接続されていますか?両方のストリームは異なるスレッドにありますか? –

+0

1.コンテンツを作成します。 2.それらは 'piped-input-stream'関数の中で' .connect'で接続されています。私の質問のコードへのリンクを見てください。 3.スレッドは作成されず、 'piped-input-stream'関数は' future'を使用して出力ストリームを処理します。私は実際には現在のコードをあまり追加せず、 'piped-input-stream'をそのまま使用しました。何か不足していますか? –

答えて

0

あなたのexcel-response機能は私に似ています。私はこれまでに非常によく似たものを書いています。あなたのcreate-excel-into-streamの機能はどのように見えますか?

これはこれまで私のために働いていました。

(ns my.data.handler 
    (:require [clojure.data.csv :as csv] 
      [clojure.java.io :as io])) 

(defn create-excel-into-stream 
    [out-stream params] 
    (let [excel-data (get-excel-data params)] 
    (with-open [writer (io/writer out-stream)] 
     (csv/write-csv writer excel-data)))) 
関連する問題