Я изо всех сил пытаюсь разделить ответ POST (multipart), что должно использоваться, чтобы поместить содержимое некоторых файлов, отправленных на сервер Yesod в базу данных (после некоторой дальнейшей обработки). Мой текущий код:Нарушение запроса POST на части в Yesod
import qualified Data.ByteString.Lazy as LZ
import qualified Data.ByteString.Lazy.Char8 as LC
...
processLines :: String -> [String] -> String
processLines delim (l:rest) = do
case l of
delim -> ""
_ -> l ++ "\n" ++ processLines delim rest
processFile :: [String] -> String
processFile (delim:some:other:line:txt) = processLines delim txt
postImpexR :: SystemsId -> Handler RepPlain
postImpexR sysid = do
wr <- waiRequest
bss <- lift $ requestBody wr $$ consume
let file = LZ.fromChunks bss
return $ RepPlain $ toContent $ processFile $ map LC.unpack $ LC.lines file
Редактировать: Удалось решить одну проблему, кажется, я нахожусь в понимании обработчиков. В чем проблема с типами здесь? Есть ли более элегантный способ сделать это, чем это?
Большое спасибо. Кажется, у меня больше всего проблем с получением правильной информации. – user2054578
ОК, но когда я использую fInfo <- lookupFiles в обработчике, он хочет добавить дополнительный текстовый аргумент. Если я добавлю «filename» (как имя параметра POST), я получаю пустой список. – user2054578
Я не могу объяснить, почему это происходит, не зная деталей запроса, но загрузка файлов должна быть полностью поддержана. Если что-то не так, тогда вы должны подать отчет об ошибке. –