Есть много multipart/form-data для загрузки файлов, но я не смог найти бесплатную версию для Scala.
Play2 имеет эту функциональность как часть фреймворка, а Spray также поддерживает данные многостраничной формы. К сожалению, обе эти функции, по-видимому, довольно интегрированы в остальные инструменты (я могу ошибаться здесь).
Мой сервер был разработан с использованием Finagle (который в настоящее время не поддерживает данные мультиплатформенной формы), и, если возможно, я хотел бы использовать бесплатное решение lib или "roll my own".
Это типичное сообщение multipart/form-data:
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value1"
First parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value2"
Second parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg
$%^&#$%^%#$
--*****org.apache.cordova.formBoundary--
В этом примере *****org.apache.cordova.formBoundary
является границей формы, поэтому многостраничная загрузка содержит 2 текстовых параметра и одно изображение (я конкатенировал данные изображения для ясности).
Если кто-то, кто знает Scala лучше меня, может немного рассказать о том, как подойти к разбору этого контента, я буду очень благодарен.
Для начала я подумал, что быстро разделил контент на три:
data.split("\\Q--*****org.apache.cordova.formBoundary\\E") foreach println
Но выполнение заметно медленное (обновление - это было вызвано разминкой). Есть ли более эффективный способ разделить детали? Моя стратегия состоит в том, чтобы разделить содержимое на части и разделить части на части. Это дрянной подход? Я видел, как подобные проблемы решаются с помощью государственных машин? Что такое хороший функциональный подход. Имейте в виду, я пытаюсь изучить правильный подход к Scala, пытаясь решить проблему.
Update:
Я действительно думал, что решение этой проблемы будет состоять из строки или двух в Scala. Если кто-то споткнется об этом вопросе с помощью гладкого решения, пожалуйста, найдите время, чтобы записать его. Из моего понимания можно было разобрать это сообщение, используя сопоставление шаблонов, разбор комбинаторов, извлечение или просто разделение строки. Я пытаюсь найти лучший способ решить эту проблему, так как проект, который я работаю, включает в себя много естественного разбора языка, и мне нужно написать собственные инструменты для анализа. Я хорошо понимаю Scala, но ничто не сравнится с советом эксперта.
Это не только решение проблемы, но и поиск наилучшего (и, надеюсь, простейшего) возможного способа решения этой проблемы.