我試圖將一些ByteString
中繼給客戶端(瀏覽器)。客戶端將不知道被請求文檔的內容類型,因此我試圖將適當的內容類型響應發送回客戶端。該文檔可以是圖像或pdf或word文檔等。在僕人中發送通用內容類型
例如,客戶端將請求/document?id=55
,服務器將響應相應的內容類型和關聯的ByteString
。
我遵循示例here:我爲圖像創建了一些東西。
data IMAGE
instance Accept IMAGE where
contentType _ = "image" M.// "jpeg"
instance MimeRender IMAGE LBS.ByteString where
mimeRender _ = id
面臨的挑戰是客戶端將無法與某些特定Accept:
頭髮送請求,所以沒有辦法像它完成here我用適當的Mime類型反應。此外,以上僅適用於圖像(假設瀏覽器將推斷出png
,即使我發送回jpeg
),但不適用於pdf
,docx
等。
我想過一個paramaterized型像MyDynamicContent String
,我會在運行時的內容類型通過,但我不知道我怎麼會宣佈我的API,即我將要使用的,而不是'[JSON]
。因爲這些例子只是一個簡單的數據類型,所以不確定這種事情是否可能。
所以我的問題是,如果我想送一些ByteString
作爲響應和動態設置Content-Type
頭,會是怎樣做到這一點的最好方式使用servant
更新:我已經打開了一個issue
服務器如何決定使用哪種內容類型進行響應? (特別是,爲了確認,這不能被靜態確定?) – user2141650
@ user2141650:'server'從數據存儲(文檔存儲服務)獲取此信息。它調用服務,服務響應內容類型和字節字符串。我知道我可以爲每種內容類型(或者至少大部分使用的內容類型)創建一個端點,並首先發送內容類型,然後讓客戶端使用與內容類型對應的端點。這是一個非常糟糕的黑客攻擊,將很多這種邏輯轉移到客戶端,我覺得應該更好地處理服務器。 – Ecognium