Существует множество 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, пытаясь решить проблему.
Обновление:
Я действительно думал, что решение этой проблемыпроблема будет в строке или две в Scala.Если кто-то наткнулся на этот вопрос с изящным решением, пожалуйста, найдите время, чтобы записать его.Из моего понимания можно было разобрать это сообщение, используя сопоставление с образцом, синтаксический анализ комбинаторов, извлечение или простое разбиение строки.Я пытаюсь найти лучший способ решения этой проблемы, так как в проекте, над которым я работаю, много разборов на естественном языке, и мне нужно написать свои собственные инструменты разбора.Я хорошо понимаю Scala, но ничто не сравнится с советом эксперта.
Дело не только в решении проблемы, но и в поиске лучшего (и, возможно, самого простого) возможного способа решения этого типа проблем.проблема.