2017年11月18日土曜日

Yesodでファイルアップロードサイズを調整する方法

Content Lengthで調整


Yesodで、デカいファイルをアップロードすると、エラーが発生する

POST /list/0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Status: 413 Too Large 0.000029971s


ファイルのアップロードサイズというか、ContentLengthの調整で対応


設定ファイルからサイズを取れるようにする


* config/settings.ymlに追加

# Content Length Max MB
max-byte: 50

* src/Settings.hs
data AppSettings = AppSettings
...
    , appMaxByte                :: Word64
    -- ^ Content Length Max MB
...

FromJSONのインスタンス設定も修正
instance FromJSON AppSettings where
    parseJSON = withObject "AppSettings" $ \o -> do
        let defaultDev =
...
...
  appMaxByte <- o .:  "max-byte"
..

maximumContentLength関数を実装する


設定を取得してその値を元に、ContentLengthの上限を設定する
instance Yesod App where
...
...
    -- Content Length Max
    maximumContentLength app _ = do
        let size = appMaxByte $ appSettings app
        return $ size * 1024 * 1024 -- MB
...

これでデカいのがあがるようになる


0 件のコメント:

コメントを投稿