diff --git a/yesod-core/ChangeLog.md b/yesod-core/ChangeLog.md index 5952081a..4f7a74d0 100644 --- a/yesod-core/ChangeLog.md +++ b/yesod-core/ChangeLog.md @@ -1,3 +1,7 @@ +## 1.6.4 + +* Add `addContentDispositionFileName` [#1504](https://github.com/yesodweb/yesod/pull/1504) + ## 1.6.3 * Add missing export for `SubHandlerFor` diff --git a/yesod-core/Yesod/Core/Handler.hs b/yesod-core/Yesod/Core/Handler.hs index 5b9cb3b7..da1e395a 100644 --- a/yesod-core/Yesod/Core/Handler.hs +++ b/yesod-core/Yesod/Core/Handler.hs @@ -118,6 +118,7 @@ module Yesod.Core.Handler , setHeader , replaceOrAddHeader , setLanguage + , addContentDispositionFileName -- ** Content caching and expiration , cacheSeconds , neverExpires @@ -780,6 +781,26 @@ deleteCookie a = addHeaderInternal . DeleteCookie (encodeUtf8 a) . encodeUtf8 setLanguage :: MonadHandler m => Text -> m () setLanguage = setSession langKey +-- | Set attachment file name. +-- +-- Allows Unicode characters by encoding to UTF-8. +-- Some modurn browser parse UTF-8 characters with out encoding setting. +-- But, for example IE9 can't parse UTF-8 characters. +-- This function use +-- () +-- +-- @since 1.6.4 +addContentDispositionFileName :: MonadHandler m => T.Text -> m () +addContentDispositionFileName fileName + = addHeader "Content-Disposition" $ rfc6266Utf8FileName fileName + +-- | Unicode attachment filename. +-- +-- > rfc6266Utf8FileName (Data.Text.pack "€") +-- "attachment; filename*=UTF-8''%E2%82%AC" +rfc6266Utf8FileName :: T.Text -> T.Text +rfc6266Utf8FileName fileName = "attachment; filename*=UTF-8''" `mappend` decodeUtf8 (H.urlEncode True (encodeUtf8 fileName)) + -- | Set an arbitrary response header. -- -- Note that, while the data type used here is 'Text', you must provide only diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index c61e7aad..f9788e6d 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 1.6.3 +version: 1.6.4 license: MIT license-file: LICENSE author: Michael Snoyman