Я обрабатываю загрузку файла с помощью yesod и хотел бы сохранить загруженный файл в файл на моем сервере с именем SHA256 содержимого.
Я думаю, что функция уровня обработчика будет выглядеть так:
fileMove fInfo (basePath <> generateSha fInfo)
Этот вопрос сосредоточен вокруг того, как написать generateSha :: FileInfo -> String
.
Я вижу несколько функций, которые могут быть полезны:
fileSource :: MonadResource m => FileInfo -> Source m ByteString
sha256Incremental :: Decoder SHA256State
completeSha256Incremental :: Decoder SHA256State -> Int -> Digest SHA256State
showDigest :: Digest t-> String
Но я не уверен в нескольких вещах:
- Как подключить это в трубу. В идеале я хотел бы, чтобы он транслировал файл.
- Используйте интерфейс SHA для постепенного создания хэша. Я могу достаточно легко получить SHA256 пустой строки, но не знаю, как добавлять значения. Предположительно это что-то скрыто в типе Decoder?
- Что такое аргумент
Int
для completeSha256Incremental.
Может ли кто-нибудь указать мне в правильном направлении?