Я обрабатываю загрузку файла с помощью Yesod и хотел бы сохранить загруженный файл в файл на моем сервере с именем SHA256 содержимое.SHA256 загруженный файл в Yesod - с использованием Conduit и Data.Digest.Pure.SHA
Я думаю, что функция обработчика уровня будет выглядеть следующим образом:
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 пустой строки достаточно легко, но я не уверен, как добавлять значения. Предположительно, это что-то скрытое в типе декодера?
- Что является аргументом
Int
полной версииSha256Incremental.
Может ли кто-нибудь указать мне в правильном направлении?
Это другая реализация, но я бы рекомендовал проверить [cryptohash-conduit] (http://haddock.stackage.org/nightly-2015-07-18/cryptohash-conduit-0.1.1/Crypto-Hash -Conduit.html), который построен поверх пакета [cryptohash] (https://www.stackage.org/package/cryptohash) (и написан тем же автором). –